source

Excel이 특정 텍스트 값을 날짜로 자동 변환하지 않도록 합니다.

lovecheck 2023. 4. 2. 10:39
반응형

Excel이 특정 텍스트 값을 날짜로 자동 변환하지 않도록 합니다.

혹시 Excel이 날짜를 변환하지 않도록 특정 필드의 csv에 추가할 수 있는 토큰이 있는지 알고 있는 사람이 있습니까?

어플리케이션에서 .csv 파일을 작성하려고 하는데, 그 중 하나의 값이 Excel에서 자동으로 텍스트에서 날짜로 변환되는 날짜처럼 보입니다.모든 텍스트 필드(날짜처럼 보이는 필드 포함)를 큰따옴표로 묶으려고 했지만 효과가 없습니다.

큰따옴표 앞에 '='를 붙이면 원하는 것을 얻을 수 있습니다.데이터가 텍스트가 되도록 강제합니다.

예: ="2008-10-03",="추가 텍스트"

편집(기타 투고에 따르면) : Jeffikins가 지적한 Excel 2007 버그 때문에 Andrew가 제안한 솔루션을 사용해야 합니다."=""2008-10-03"""

오래된 질문인 건 알지만, 문제는 금방 사라지지 않을 거예요.CSV 파일은 대부분의 프로그래밍 언어에서 쉽게 생성할 수 있으며, 일반 텍스트 편집기를 사용하여 쉽게 읽을 수 있으며 어디서나 볼 수 있습니다.

텍스트 필드의 날짜뿐만 아니라 숫자도 텍스트에서 숫자로 변환됩니다.이것이 문제가 되는 몇 가지 예를 제시하겠습니다.

  • ZIP/우편번호
  • 전화번호
  • 정부 식별 번호

1개 또는 여러 개의 0으로 시작하는 경우가 있으며 숫자로 변환하면 0이 없어집니다.또는 이 값에는 수학 연산자와 혼동할 수 있는 문자가 포함되어 있습니다(날짜: /, - 등).

앞에서 설명한 바와 같이 "중단되는 =" 솔루션이 이상적이지 않다고 생각할 수 있는 두 가지 사례는 다음과 같습니다.

  • MS Excel 이외의 프로그램으로 파일을 Import 할 수 있는 경우(MS Word의 Mail Merge 기능이 생각납니다).
  • 가독성이 중요할 수 있는 분야입니다.

이 문제를 해결하기 위한 내 해킹은

값에 숫자가 아닌 문자 및/또는 날짜가 아닌 문자를 사전/적용하면 값은 텍스트로 인식되며 변환되지 않습니다.인쇄되지 않은 문자는 표시된 값을 변경하지 않으므로 좋습니다.단, 플레인오스트 스페이스 문자(\s, ASCII 32)는 Excel에 의해 잘려나간 후에도 값이 변환되기 때문에 기능하지 않습니다.다만, 그 밖에도, 올바르게 동작하는 인쇄 공간 및 비인쇄 공간 문자가 있습니다.그러나 가장 쉬운 방법은 단순 탭 문자(\t, ASCII 9)를 추가하는 입니다.

이 접근방식의 이점:

  • 키보드 또는 기억하기 쉬운 ASCII 코드(9)에서 사용 가능.
  • 수입에 방해가 되지 않습니다.
  • 일반적으로 메일 병합 결과에 영향을 주지 않지만(템플릿 레이아웃에 따라 다르지만) 일반적으로 줄 끝에 넓은 공간만 추가합니다.(단, 이것이 문제가 되는 경우는, 제로폭 스페이스(ZWSP, Unicode U+200B)등의 다른 문자를 참조해 주세요).
  • 메모장 등에서 CSV를 표시할 때는 큰 장애가 되지 않습니다.
  • Excel(또는 메모장 등)에서 검색/교환하여 삭제할 수 있습니다.
  • CSV를 Import할 필요는 없지만 더블클릭만 하면 CSV를 Excel로 열 수 있습니다.

탭을 사용하지 않으려는 이유가 있는 경우 유니코드 표에서 다른 적합한 항목을 찾아보십시오.

다른 옵션

새로운 MS Excel 버전에서 Import할 수 있도록 특정 형식도 허용되며 .X와 유사한 옵션이 많이 허용됩니다.LS포맷인데 아직 경험이 없어요.

그래서 여러 가지 선택지가 있습니다.요건/어플리케이션에 따라서는, 어느 쪽이 다른 쪽보다 좋은 경우가 있습니다.


추가

MS Excel의 새로운 버전(2013+)에서는 CSV를 스프레드시트 형식으로 열지 않습니다.워크플로우에서 스피드 버프를 하나 더 추가하면 Excel의 유용성이 떨어집니다.적어도 그것을 회피하기 위한 지시는 존재한다.다음 Stackoverflow를 참조하십시오.Excel 2013의 .csv 파일을 올바르게 표시하는 방법?

Jarod의 솔루션과 Jeffiekins가 제기한 문제를 해결하면

"May 16, 2011"

로.

"=""May 16, 2011"""

저도 같은 문제가 있었습니다.csv 파일의 내용을 편집하지 않아도, 다음의 회피책이 도움이 되었습니다.

파일 이름을 ".csv"가 아닌 다른 이름으로 지정할 수 있는 경우 "Myfile"과 같은 확장자 ".txt"로 지정할 수 있습니다.txt" 또는 "Myfile.csv.txt"를 선택합니다.그런 다음 Excel에서 파일을 열면(드래그 앤 드롭이 아니라 [파일]-> [열기] 또는 [최근에 사용한 파일]목록을 사용), Excel에서 "텍스트 Import 마법사"가 나타납니다.

마법사의 첫 페이지에서 파일 유형에 대해 "Delimited"를 선택합니다.

마법사의 두 번째 페이지에서 구분 기호로 "를 선택하고 값을 따옴표로 묶은 경우 텍스트 한정자를 선택합니다.

세 번째 페이지에서 모든 열을 개별적으로 선택하고 각 열에 "General" 대신 "Text"를 지정하여 Excel이 데이터를 망치지 않도록 합니다.

이것이 여러분이나 비슷한 문제를 가진 누군가에게 도움이 되기를 바랍니다!

2018

CSV를 수정하지 않고 사용할 수 있는 유일한 적절한 솔루션입니다.

Excel 2010:

  1. 새 워크북 작성
  2. Data > From Text > CSV 파일 선택
  3. 팝업에서 [Delimited]옵션 버튼을 선택하고 [Next]을 클릭합니다.
  4. 구분자 체크박스: "쉼표"만 선택하고 다른 옵션을 선택 취소한 후 "다음"을 클릭합니다.
  5. "데이터 미리 보기"에서 오른쪽 끝으로 스크롤한 다음 Shift 키를 누른 상태에서 마지막 열을 클릭합니다(모든 열이 선택됨).이제 "컬럼 데이터 형식"에서 라디오 버튼 "텍스트"를 선택한 다음 "마침"을 클릭합니다.

Excel office365: (클라이언트 버전)

  1. 새 워크북 작성
  2. [ Data ]> [ From Text / CSV ]> CSV 파일을 선택합니다.
  3. 데이터 유형 검출 > 검출하지 않음

주의: Excel office365(web판)입니다만, 이 글을 쓰고 있기 때문에, 당신은 그것을 할 수 없습니다.

경고: Excel '07(적어도)은(는) 버그가 있습니다. 필드의 내용에 쉼표가 있으면 ="field, contents"를 올바르게 구문 분석하지 않고 쉼표 뒤의 모든 내용을 따옴표에 관계없이 다음 필드에 넣습니다.

필드 내용에 쉼표가 포함되어 있을 때 =를 제거하는 것이 유일한 해결 방법입니다.

이는 Excel로 정확하게 "올바른"을 나타낼 수 없는 분야가 있다는 것을 의미할 수 있지만, 지금까지는 누구도 크게 놀라지 않을 것이라고 믿습니다.

C#의 CSV 파일에 쓸 문자열을 작성할 때 다음과 같이 포맷해야 했습니다.

"=\"" + myVariable + "\""

Excel 2010에서는 새로운 시트를 엽니다.데이터 리본에서 "텍스트에서 외부 데이터 가져오기"를 클릭합니다.CSV 파일을 선택하고 "Open"을 클릭합니다.[다음]을 클릭합니다."탭"을 선택 취소하고 "Comma" 옆에 체크 표시를 한 후 "Next"를 클릭합니다.첫 번째 열의 아무 곳이나 클릭합니다.Shift 키를 누른 상태에서 슬라이더를 끝까지 끌어 마지막 열을 클릭한 다음 Shift 키를 놓습니다."텍스트" 라디오 버튼을 클릭한 다음 "완료"를 클릭합니다.

CSV 파일에서와 마찬가지로 모든 열이 텍스트로 Import됩니다.

MARC1, March1, SEPT1 등의 유전자명으로 작업하는 사람에게는 다소 방해가 되는 Microsoft Office 2016 릴리즈에서도 문제가 되고 있습니다.R에서 ".csv" 파일을 생성하여 Excel 사용자와 공유한 후 가장 실용적인 솔루션임을 알게 되었습니다.

  1. CSV 파일을 텍스트로 엽니다(메모).
  2. 복사합니다(ctrl+a, ctrl+c).
  3. 새 Excel 시트에 붙여넣습니다. 긴 텍스트 문자열로 모두 한 열에 붙여넣습니다.
  4. 이 열을 선택/선택합니다.
  5. 데이터 이동 - "열로 텍스트..." 창에서 "분할됨"(다음)을 선택합니다."comma"(콤마)가 표시되어 있는지 확인합니다(이미 아래 열로 데이터를 구분하여 표시함)(다음 창에서는 원하는 열을 선택하고 텍스트로 표시할 수 있습니다(일반이 아닌 마침).

HTH

여기서 csv 파일을 생성할 때 사용하는 간단한 방법은 다음과 같습니다.이 방법은 값이 약간 변경되기 때문에 모든 애플리케이션에서 적합하지 않습니다.

csv의 모든 값에 공백을 추가합니다.

이 공간은 "1", "2.3" 및 "-2.9e4"와 같은 숫자에서 엑셀에 의해 제거되지만 "1993년 1월 10일"과 같은 날짜 및 "TRUE"와 같은 부란은 그대로 유지되므로 엑셀의 내부 데이터 유형으로 변환되지 않습니다.

또한 큰따옴표가 읽혀질 때 큰따옴표가 확대되는 것을 방지하므로 excel에서 CSV 텍스트를 만드는 완벽한 방법은 변경되지 않습니다. 만약 "3.1415"와 같은 텍스트가 "3.1415"와 같이 큰따옴표로 둘러싸서 문자열 전체를 공백으로 추가하는 것입니다(즉, 입력하는 내용을 나타내기 위해 작은따옴표를 사용). "3.1415"그리고 excel에서는 항상 원본 문자열이 있습니다.단, 이중 따옴표로 둘러싸여 공백으로 앞에 있으므로 모든 공식 등에서 해당 문자열을 고려해야 합니다.

(Excel 2003을 상정...)

Text-to-Columns 마법사를 사용하는 경우 스텝3에서 각 열의 데이터 유형을 지시할 수 있습니다.미리보기의 열을 클릭하고 잘못된 동작 열을 "일반"에서 "텍스트"로 변경합니다.

파일 자체를 조작하지 않고 이 작업을 수행할 수 있는 유일한 방법입니다.Excel은 늘 그렇듯이 몇 시간이고 책상을 두드리며 이 사실을 알게 되었습니다.

.csv 파일 확장자를 .txt로 변경합니다.그러면 파일을 열 때 Excel이 자동으로 변환하지 않습니다.방법은 다음과 같습니다. Excel을 열고 빈 워크시트를 닫은 다음 파일 = > 파일을 열고 확장자가 .txt인 파일을 선택합니다.이렇게 하면 Excel이 "텍스트 가져오기 마법사"를 열어야 합니다. 이 마법사에서 파일을 해석하는 방법에 대한 질문을 받을 수 있습니다.먼저 구분 기호(콤마, 탭 등)를 선택한 다음(여기서는 중요한 부분) 열 집합을 선택하고 형식을 선택합니다.파일에 있는 내용을 정확하게 보려면 "텍스트"를 선택하면 Excel은 구분자 사이의 내용만 표시합니다.

(EXCEL 2007 이후)

소스 파일을 편집하지 않고 날짜 형식을 "검출"하지 않도록 Excel을 강제하는 방법

다음 중 하나:

  • 파일 이름을 .txt로 변경합니다.
  • CSV 로 직접 여는 대신 워크북을 Excel로 합니다.
    Data > Get external data > From Text
    CSV ★★★★★★★★★★★★★★★★★」

어느 쪽이든 Import 옵션이 표시됩니다.날짜가 포함된 각 열을 선택하고 Excel을 "일반"이 아닌 "텍스트" 형식으로 지정하기만 하면 됩니다.

이 문제를 해결하기 위해 각 CSV 값 앞에 "="를 추가하고 각 CSV 값 뒤에 큰따옴표를 하나씩 추가한 후 Excel에서 파일을 엽니다.다음 값을 예로 들어 보겠습니다.

012345,00198475

Excel에서 열기 전에 다음과 같이 변경해야 합니다.

"="""012345","="""00198475"

이렇게 하면 모든 셀 값이 Excel에서 수식으로 표시되므로 숫자, 날짜 등으로 형식이 지정되지 않습니다.예를 들어 값 012345는 다음과 같이 표시됩니다.

="012345"

여기에 제시된 솔루션은 모두 좋은 솔루션이 아닙니다.개별 케이스에서 사용할 수 있지만 최종 표시를 제어할 수 있는 경우에만 사용할 수 있습니다.예를 들어 소매업자에게 판매하는 제품의 목록을 작성하는 작업을 하고 있습니다.이것은 CSV 형식이며 부품 코드가 포함되어 있으며, 그 중 일부는 제조업체가 설정한 0으로 시작합니다(당사가 관리하지 않음).선행하는 0을 제거하면 실제로 다른 제품과 일치할 수 있습니다.소매점 고객은 백엔드 처리 프로그램 때문에 CSV 형식의 목록을 원합니다.백엔드 처리 프로그램도 고객마다 다르기 때문에 CSV 파일 형식을 변경할 수 없습니다.접두사 '='도 추가되지 않았습니다.원시 CSV 파일의 데이터는 정확합니다. Excel에서 이러한 파일을 열면 문제가 시작됩니다.그리고 많은 고객들이 컴퓨터에 정통하지 못하다.이메일 첨부 파일을 열어 저장할 수 있습니다.데이터를 Excel Friendly(위의 TAB를 추가하고 다른 하나는 마스터)로 제공하는 두 가지 형식으로 제공하려고 합니다.그러나 일부 고객은 우리가 왜 이렇게 해야 하는지 이해하지 못할 것이기 때문에 이는 희망사항일 수 있습니다.한편, 고객이 스프레드시트에서 '잘못된' 데이터를 볼 수 있는 이유를 계속 설명합니다.Microsoft 가 적절히 변경할 때까지, 최종 유저의 파일 사용 방법을 제어할 수 없는 한, 이 문제를 적절히 해결할 수 없습니다.

이번 주에 이 컨벤션을 접하게 되었습니다만, 훌륭한 어프로치인 것 같습니다만, 어디에서도 참조할 수 없습니다.아는 사람 있어요?그것에 대한 소식통을 인용할 수 있나요?나는 몇 시간이고 찾아보지 않았지만 누군가가 이 접근법을 알아주길 바란다.

예 1: =sq012345678905)는 012345678905로 표시됩니다.

예 2: =420-12-12")는 12/12/12가 아닌 1954-12-12로 표시됩니다.

안녕 나도 같은 문제가 있어

다른 CSV 파일을 작성하기 위해 이 vbscipt를 씁니다.새 CSV 파일은 각 필드의 글꼴에 공백이 있으므로 Excel은 이를 텍스트로 인식합니다.

따라서 아래 코드(예를 들어 Modify_CSV.vbs)를 사용하여 .vbs 파일을 만들고 저장한 후 닫습니다.원래 파일을 vbscript 파일로 끌어다 놓습니다.동일한 위치에 파일 이름에 "SPACE_ADDED"가 있는 새 파일을 만듭니다.

Set objArgs = WScript.Arguments

Set objFso = createobject("scripting.filesystemobject")

dim objTextFile
dim arrStr ' an array to hold the text content
dim sLine  ' holding text to write to new file

'Looping through all dropped file
For t = 0 to objArgs.Count - 1
    ' Input Path
    inPath = objFso.GetFile(wscript.arguments.item(t))

    ' OutPut Path
    outPath = replace(inPath, objFso.GetFileName(inPath), left(objFso.GetFileName(inPath), InStrRev(objFso.GetFileName(inPath),".") - 1) & "_SPACE_ADDED.csv")

    ' Read the file
    set objTextFile = objFso.OpenTextFile(inPath)


    'Now Creating the file can overwrite exiting file
    set aNewFile = objFso.CreateTextFile(outPath, True) 
    aNewFile.Close  

    'Open the file to appending data
    set aNewFile = objFso.OpenTextFile(outPath, 8) '2=Open for writing 8 for appending

    ' Reading data and writing it to new file
    Do while NOT objTextFile.AtEndOfStream
        arrStr = split(objTextFile.ReadLine,",")

        sLine = ""  'Clear previous data

        For i=lbound(arrStr) to ubound(arrStr)
            sLine = sLine + " " + arrStr(i) + ","
        Next

        'Writing data to new file
        aNewFile.WriteLine left(sLine, len(sLine)-1) 'Get rid of that extra comma from the loop


    Loop

    'Closing new file
    aNewFile.Close  

Next ' This is for next file

set aNewFile=nothing
set objFso = nothing
set objArgs = nothing

Excel이 아닙니다.Windows 에서는, 수식, 데이터를 날짜로 인식해, 자동 정정합니다.Windows 설정을 변경해야 합니다.

"컨트롤 패널" (-> "클래식 표시로 전환") -> "지역 및 언어 옵션" -> 탭 "지역 옵션" -> "맞춤..." -> 탭 "숫자" -> 원하는 대로 기호를 변경합니다.

http://www.pcreview.co.uk/forums/enable-disable-auto-convert-number-date-t3791902.html

이 기능은 컴퓨터에서 작동합니다. 예를 들어 고객의 컴퓨터에서 이러한 설정을 변경하지 않으면 데이터가 아닌 날짜가 표시됩니다.

csv 파일을 변경하지 않고 다음 작업을 수행할 수 있습니다.

  1. [ Excel Format Cells ]옵션을 [text]로 변경합니다.
  2. 그런 다음 "텍스트 가져오기 마법사"를 사용하여 csv 셀을 정의합니다.
  3. 가져온 데이터를 삭제합니다.
  4. 그런 다음 일반 텍스트로 붙여넣기만 하면 됩니다.

excel은 자동 날짜 형식을 무시한 텍스트 형식으로 CSV 셀의 형식을 적절하게 지정하고 구분합니다.

좀 바보 같은 작업이지만 가져오기 전에 CSV 데이터를 수정하는 것보다 낫습니다.Andy Baird와 Richard는 이 방법을 피했지만 몇 가지 중요한 단계를 놓쳤습니다.

저의 경우 R을 사용하여 생성된 csv 파일의 "9월 8일"이 Excel 2013에서 "8월"로 변환되었습니다.이 문제는 xlsx 패키지의 write.xlsx2() 함수를 사용하여 출력 파일을 xlsx 형식으로 생성함으로써 해결되었습니다.이 파일은 Excel에 의해 불필요한 변환 없이 로드될 수 있습니다.따라서 csv 파일이 주어진 경우 write.xlsx2() 함수를 사용하여 R로 로드하여 xlsx로 변환해 볼 수 있습니다.

가장 쉬운 해결책 오늘 이걸 알아냈어요.

  • Word로 열기
  • 모든 하이픈을 대시로 바꿉니다.
  • 저장 후 닫기
  • Excel로 열기

편집이 완료되면 언제든지 Word에서 다시 열어서 대시 대신 하이픈을 다시 사용할 수 있습니다.

Google 드라이브(또는 Mac의 경우 번호):

  1. Excel에서 데이터 열기
  2. 잘못된 데이터가 있는 컬럼의 형식을 텍스트로 설정합니다([Format]> [ Cells ]> [ Number ]> [ Text ] ) 。
  3. .csv를 Google Drive에 로드하고 Google 시트로 엽니다.
  4. 문제 열을 복사합니다.
  5. 열을 텍스트로 Excel에 붙여넣기(편집> 특수 붙여넣기> 텍스트)

또는 Mac에서 3단계 작업을 수행하는 경우 Numbers(숫자)로 데이터를 열 수 있습니다.

(EXCEL 2016 이후로는 실제로 이전 버전에서는 시도하지 않았습니다)

  1. 새 공백 페이지 열기
  2. 탭 "Data"로 이동합니다.
  3. "텍스트/CSV에서"를 클릭하여 CSV 파일을 선택합니다.
  4. 데이터가 올바른지 미리 봅니다.
  5. ②일부 열이 날짜로 변환되는 경우 "편집"을 클릭한 후 열 선두에 있는 캘린더를 클릭하여 텍스트를 선택합니다.
  6. "닫기 & 로드"를 클릭합니다.

만약 누군가가 여전히 답을 찾고 있다면, 아래 라인이 나에게 딱 들어맞았다.

에 들어갔습니다.
ㅇㅇㅇ.=("04SEP2009")라고 표시되어 있습니다.04SEP2009는 않다09/04/2009

15자리보다 큰 정수에 대해서도 마찬가지입니다.그것들은 더 이상 다듬어지지 않았다.

파일 원본 데이터를 변경할 수 있는 경우

원본 CSV 파일을 변경할 준비가 되어 있는 경우, 또 다른 옵션은 데이터의 '딜리미터'를 변경하는 것입니다. 따라서 데이터가 '4/11'(또는 4-11)이고 Excel이 이를 2021년 4/11(영국 또는 11-4-2021 US)로 변환하는 경우, '/' 또는 '-' 문자를 예기치 않은 Excel 날짜로 변환하는 것을 방지할 수 있습니다.옵션은 다음과 같습니다.

  • 칠데('~')
  • 플러스(+)
  • 밑줄('_')
  • 이중 대시('--')
  • 엔대시(Alt 150)
  • Em-Dash (Alt 151)
  • (다른 캐릭터!)

주의: Unicode 또는 기타 ASCII/ansi 이외의 문자로 이동하면 파일을 다른 곳에서 사용할 경우 문제가 복잡해질 수 있습니다.

따라서 칠드로 '4-11'을 '4~11'로 변환하면 데이트로 취급되지 않습니다!

대용량 CSV 파일의 경우 추가 오버헤드(예: 추가 따옴표/스페이스/탭/포뮬라 구성)가 없으며 파일을 직접 열 때(즉, CSV를 두 번 클릭하여 열림)에만 작동하며 열을 텍스트로 미리 포맷하거나 CSV 파일을 텍스트로 "가져오기"를 방지합니다.

필요한 경우 메모장(또는 유사한 도구)에서 검색/바꾸기를 통해 대체 구분 기호로 쉽게 변환할 수 있습니다.

원본 데이터 가져오기

새로운 버전의 Excel에서는 데이터를 Import할 수 있습니다(다른 답변에 기재되어 있습니다).이전 버전의 Excel에서는 'Power Query' 추가 기능을 설치할 수 있습니다.이 툴은 변환 없이 CSV를 Import할 수도 있습니다.선택:Power Query 탭/From file/From Text-CSV를 선택한 다음 'Load'를 클릭하여 테이블로 엽니다.('데이터 유형 탐지' 옵션에서 '데이터 유형 탐지 안 함'을 선택할 수 있습니다).

이게 오래된 실이라는 걸 알아요.PowerShell COM 개체를 통해 Office 2013을 사용하는 데 여전히 문제가 있는 저 같은 사용자는 opentext 메서드를 사용할 수 있습니다.문제는 이 방법에는 서로 배타적인 주장들이 많다는 것이다.이 문제를 해결하려면invoke-namedparameter이 투고에서 소개한 방법.예를 들면 다음과 같습니다.

$ex = New-Object -com "Excel.Application"
$ex.visible = $true
$csv = "path\to\your\csv.csv"
Invoke-NamedParameter ($ex.workbooks) "opentext" @{"filename"=$csv; "Semicolon"= $true}

유감스럽게도 이 메서드는 셀에 줄 바꿈이 포함되어 있을 때 CSV 해석에 영향을 준다는 것을 알게 되었습니다.이는 CSV에서 지원되지만 Microsoft의 구현이 도청되고 있는 것 같습니다.또한 독일 특유의 문자를 감지하지 못했습니다.올바른 문화를 제공해도 이 행동은 바뀌지 않았다.모든 파일(CSV 및 스크립트)은 utf8 인코딩으로 저장됩니다.먼저 CSV 셀을 셀별로 삽입하기 위해 다음과 같은 코드를 작성했습니다.

$ex = New-Object -com "Excel.Application"
$ex.visible = $true;
$csv = "path\to\your\csv.csv";
$ex.workbooks.add();
$ex.activeWorkbook.activeSheet.Cells.NumberFormat = "@";
$data = import-csv $csv -encoding utf8 -delimiter ";"; 
$row = 1; 
$data | %{ $obj = $_; $col = 1; $_.psobject.properties.Name |%{if($row -eq1){$ex.ActiveWorkbook.activeSheet.Cells.item($row,$col).Value2= $_ };$ex.ActiveWorkbook.activeSheet.Cells.item($row+1,$col).Value2 =$obj.$_; $col++ }; $row++;}

하지만 이것은 매우 느리기 때문에 나는 대안을 찾았다.Excel을 사용하면 행렬을 사용하여 셀 범위의 값을 설정할 수 있습니다. 블로그의 알고리즘을 사용하여 CSV를 멀티 어레이로 변환했습니다.

function csvToExcel($csv,$delimiter){
     $a = New-Object -com "Excel.Application"
     $a.visible = $true
     
    $a.workbooks.add()
     $a.activeWorkbook.activeSheet.Cells.NumberFormat = "@"
     $data = import-csv -delimiter $delimiter $csv; 
     $array = ($data |ConvertTo-MultiArray).Value
     $starta = [int][char]'a' - 1
     if ($array.GetLength(1) -gt 26) {
         $col = [char]([int][math]::Floor($array.GetLength(1)/26) + $starta) + [char](($array.GetLength(1)%26) + $Starta)
     } else {
         $col = [char]($array.GetLength(1) + $starta)
     }
     $range = $a.activeWorkbook.activeSheet.Range("a1:"+$col+""+$array.GetLength(0))
     $range.value2 = $array;
     $range.Columns.AutoFit();
     $range.Rows.AutoFit();
     $range.Cells.HorizontalAlignment = -4131
     $range.Cells.VerticalAlignment = -4160
}

 function ConvertTo-MultiArray {
     param(
         [Parameter(Mandatory=$true, Position=1, ValueFromPipeline=$true)]
         [PSObject[]]$InputObject
     )
     BEGIN {
         $objects = @()
         [ref]$array = [ref]$null
     }
     Process {
         $objects += $InputObject
     }
     END {
         $properties = $objects[0].psobject.properties |%{$_.name}
         $array.Value = New-Object 'object[,]' ($objects.Count+1),$properties.count
         # i = row and j = column
         $j = 0
         $properties |%{
             $array.Value[0,$j] = $_.tostring()
             $j++
         }
         $i = 1
         $objects |% {
             $item = $_
             $j = 0
             $properties | % {
                 if ($item.($_) -eq $null) {
                     $array.value[$i,$j] = ""
                 }
                 else {
                     $array.value[$i,$j] = $item.($_).tostring()
                 }
                 $j++
             }
             $i++
         }
         $array
     } 
} 
csvToExcel "storage_stats.csv" ";"

위의 코드를 그대로 사용할 수 있습니다.모든 CSV를 Excel로 변환합니다.경로를 CSV 및 맨 아래에 있는 구분 문자로 변경하기만 하면 됩니다.

OK는 Excel 2003에서 2007년까지의 간단한 방법을 찾아냈습니다.빈 xls 워크북을 엽니다.그런 다음 데이터 메뉴로 이동하여 외부 데이터를 가져옵니다.csv 파일을 선택합니다.마법사를 수행한 후 "열 데이터 형식"에서 "텍스트"를 입력해야 하는 열을 선택합니다.이렇게 하면 열 전체가 텍스트 형식으로 Import되어 Excel이 특정 셀을 날짜로 취급하지 못하게 됩니다.

이 문제는 Mac Office 2011 및 Office 2013에서 여전히 발생하며 예방할 수 없습니다.아주 기본적인 것 같아요.

CSV에 "1 - 2" 및 "7 - 12"와 같은 값을 쉼표로 올바르게 묶은 경우 자동으로 Excel 내의 날짜로 변환됩니다. 그 후 일반 텍스트로 변환하면 43768과 같은 날짜의 숫자 표현을 얻을 수 있습니다.또한 바코드 및 EAN 번호에 있는 많은 숫자를 다시 123E+ 번호로 변환하여 되돌릴 수 없습니다.

Google Drive의 Google Sheets는 숫자를 날짜로 변환하지 않습니다.바코드는 3글자마다 쉼표를 넣지만 쉽게 제거할 수 있습니다.특히 MAC/Windows CSV를 다룰 때는 CSV를 매우 잘 처리합니다.

언젠가 누군가를 구할 수 있을지도 몰라

과학적 표기법으로 계속 변환되는 신용카드 번호에 대해 이 작업을 수행합니다..csv를 Google 시트로 Import합니다.이제 가져오기 옵션을 사용하여 숫자 값의 자동 형식을 해제할 수 있습니다.중요한 열을 일반 텍스트로 설정하고 xlsx로 다운로드합니다.

끔찍한 작업 흐름이지만 적어도 제 가치는 그대로 남아 있습니다.

이 VBA 매크로에서는 기본적으로 출력 범위를 텍스트로 포맷한 후 번호를 붙여 넣었습니다.8/11, 23/6, 1/3 등의 값을 Excel이 날짜로 해석하지 않고 붙여넣고 싶을 때 딱 맞습니다.

Sub PasteAsText()
' Created by Lars-Erik Sørbotten, 2017-09-17
Call CreateSheetBackup
    
Columns(ActiveCell.Column).NumberFormat = "@"
    
Dim DataObj As MSForms.DataObject
Set DataObj = New MSForms.DataObject
DataObj.GetFromClipboard

ActiveCell.PasteSpecial

End Sub

이것이 다른 사람에게도 효과가 있는지 알고 싶습니다.이 문제에 대한 해결책을 찾고 있지만 삽입이 포함되지 않은 빠른 VBA 솔루션을 찾을 수 없었습니다.'입력 텍스트 앞에 있습니다.이 코드는 데이터를 원래 형태로 유지합니다.

언급URL : https://stackoverflow.com/questions/165042/stop-excel-from-automatically-converting-certain-text-values-to-dates

반응형