누군가가 특정 필드에 대해 내 CSV에 추가 할 수있는 토큰이 있는지 알고 있습니까? 그래서 Excel은 날짜로 변환하려고하지 않습니까?
내 응용 프로그램에서 .csv 파일을 작성하려고하는데 값 중 하나가 Excel에서 자동으로 텍스트를 날짜로 변환하는 날짜처럼 보입니다. 모든 텍스트 필드 (날짜처럼 보이는 필드 포함)를 큰 따옴표 안에 넣으려고했지만 아무런 효과가 없습니다.
누군가가 특정 필드에 대해 내 CSV에 추가 할 수있는 토큰이 있는지 알고 있습니까? 그래서 Excel은 날짜로 변환하려고하지 않습니까?
내 응용 프로그램에서 .csv 파일을 작성하려고하는데 값 중 하나가 Excel에서 자동으로 텍스트를 날짜로 변환하는 날짜처럼 보입니다. 모든 텍스트 필드 (날짜처럼 보이는 필드 포함)를 큰 따옴표 안에 넣으려고했지만 아무런 효과가 없습니다.
답변:
큰 따옴표 앞에 '='를 넣으면 원하는 것을 얻을 수 있습니다. 데이터를 텍스트로 만듭니다.
예. = "2008-10-03", = "추가 텍스트"
편집 (다른 게시물에 따라) : Jeffiekins가 지적한 Excel 2007 버그 때문에 Andrew가 제안한 솔루션을 사용해야합니다 ."=""2008-10-03"""
나는 이것이 오래된 질문이라는 것을 알고 있지만 문제는 곧 사라지지 않습니다. CSV 파일은 대부분의 프로그래밍 언어에서 쉽게 생성 할 수 있으며 일반 텍스트 편집기를 사용하는 크런치에서 사람이 읽을 수있는 작고 읽기 편하며 유비쿼터스입니다.
문제는 텍스트 필드의 날짜 뿐만 아니라 숫자 도 텍스트에서 숫자로 변환되는 것입니다. 이것이 문제가되는 몇 가지 예 :
때로는 하나 이상의 0으로 시작할 수 있으며 숫자로 변환하면 버려집니다. 또는 값에 수학 연산자와 혼동 될 수있는 문자가 포함되어 있습니다 (날짜 : /,-).
앞에서 언급 한 것처럼 "prepending ="솔루션 이 이상적이지 않다고 생각할 수있는 두 가지 경우 는
값에 숫자가 아닌 문자 및 / 또는 날짜가 아닌 문자를 사전 / 추가하면 값이 텍스트로 인식되고 변환되지 않습니다. 인쇄되지 않은 문자는 표시된 값을 변경하지 않기 때문에 좋습니다. 그러나 일반 이전 공백 문자 (\ s, ASCII 32)는 Excel에서 잘린 다음 값이 계속 변환되므로이 기능이 작동하지 않습니다. 그러나 잘 작동하는 다양한 다른 인쇄 및 비 인쇄 공간 문자가 있습니다. 그러나 가장 쉬운 방법 은 간단한 탭 문자 (\ t, ASCII 9) 를 추가 (뒤에 추가)하는 것입니다.
이 방법의 장점 :
탭을 사용하지 않으려는 이유가있는 경우 유니 코드 테이블에서 다른 것이 있는지 찾아보십시오.
최신 MS Excel 버전에서 가져 오기 위해 특정 형식을 허용하고 .XLS 형식과 비슷한 옵션을 더 많이 허용하는 XML 파일을 생성하는 것이 될 수도 있지만 이에 대한 경험은 없습니다.
다양한 옵션이 있습니다. 요구 사항 / 응용 프로그램에 따라 하나가 다른 것보다 낫습니다.
MS Excel의 최신 버전 (2013+)은 더 이상 스프레드 시트 형식으로 CSV를 열지 않는다고 말해야합니다. 워크 플로에서 속도가 한 번 더 높아져 Excel의 유용성이 떨어집니다. 예를 들어이 Stackoverflow : Excel 2013에서 .csv 파일을 올바르게 표시하는 방법은 무엇입니까? .
\t
분리 문자에 추가 한 후 올바른 선행 0을 얻었습니다 ;
... MS Office를 젠장하는 데 왜 2 분 이상이 걸렸습니까?
column_name
)를 사용했습니다. 트릭도 했어요. 감사!
'
. 왜냐하면 잘 이해되고 산만하지 않기 때문입니다 ...하지만 보이지 않는 것이 좋습니다.
Jarod의 솔루션과 Jeffiekins가 제기 한 문제를 해결하면서 수정할 수 있습니다.
"May 16, 2011"
에
"=""May 16, 2011"""
"
날짜 사이의 값 이 필요할 경우 문제를 일으킬 것 입니다.
"806676","None","41","=""05-16-2011""","100.00","False"
대신 시도 하면 저장 후 다시로드하면 하이픈이있는 텍스트가 사라집니다.
비슷한 문제가 있었고 이것은 CSV 파일 내용을 편집하지 않고도 도움이되는 해결 방법입니다.
파일 이름을 ".csv"이외의 다른 이름으로 지정할 수있는 경우 "Myfile.txt"또는 "Myfile.csv.txt"와 같이 ".txt"확장명으로 파일 이름을 지정할 수 있습니다. 그런 다음 끌어서 놓기가 아니라 파일-> 열기 또는 가장 최근에 사용한 파일 목록을 사용하여 Excel에서 열면 "텍스트 가져 오기 마법사"가 제공됩니다.
마법사의 첫 페이지에서 파일 유형으로 "구분"을 선택하십시오.
마법사의 두 번째 페이지에서 ","를 구분 기호로 선택하고 값을 따옴표로 묶은 경우 텍스트 한정자를 선택하십시오.
세 번째 페이지에서 모든 열을 개별적으로 선택하고 "일반"대신 "텍스트"유형을 지정하여 Excel이 데이터를 엉망으로 만드는 것을 막으십시오.
이것이 당신이나 비슷한 문제를 가진 누군가를 돕기를 바랍니다!
경고 : Excel '07 (적어도) 버그가 있습니다 : 필드의 내용에 쉼표가 있으면 = "필드, 내용"을 올바르게 구문 분석하지 않지만 쉼표 뒤에있는 모든 것을 인용 부호에 관계없이 다음 필드.
내가 찾은 유일한 해결 방법은 필드 내용에 쉼표가 포함될 때 =를 제거하는 것입니다.
이것은 Excel에서 정확히 "올바른"을 나타내는 것이 불가능한 일부 필드가 있음을 의미하지만 지금까지 아무도 놀라지 않을 것이라고 믿습니다.
field, content
이 "
그 안에. 예"=""field, co""ntent"""
""""
.
1"2
, 경우에 당신은 (그냥 같이있을 떠나는 반대로이 트릭을 사용하기로 선택한 "1""2"
파일의 - 엑셀 이미 텍스트로입니다 처리 한 것), 최대 엑셀 타겟팅 CSV 파일 끝에서 다음 최종 올바른 문자열을 인 "=""1""""2"""
.
C #으로 CSV 파일에 쓸 문자열을 만드는 동안 다음과 같이 형식을 지정해야했습니다.
"=\"" + myVariable + "\""
2018 년
나를 위해 일한 유일한 올바른 솔루션 (및 CSV를 수정하지 않은 경우) ).
엑셀 2010 :
Excel Office365 : (클라이언트 버전)
참고 : Excel office365 (웹 버전)는이 글을 쓰고 있으므로 그렇게 할 수 없습니다.
Excel 2010에서 새 시트를 엽니 다. 데이터 리본에서 "텍스트에서 외부 데이터 가져 오기"를 클릭하십시오. CSV 파일을 선택한 다음 "열기"를 클릭하십시오. "다음"을 클릭하십시오. "탭"을 선택 취소하고 "쉼표"옆에 확인 표시를 한 다음 "다음"을 클릭하십시오. 첫 번째 열의 아무 곳이나 클릭하십시오. Shift 키를 누른 상태에서 마지막 열을 클릭 할 수있을 때까지 슬라이더를 가로 질러 끈 다음 Shift 키를 놓습니다. "텍스트"라디오 버튼을 클릭 한 다음 "마침"을 클릭하십시오.
모든 열은 CSV 파일에있는 것처럼 텍스트로 가져옵니다.
MARC1, MARCH1, SEPT1 등과 같은 유전자 이름을 사용하는 사람들에게는 오히려 Microsoft Office 2016 릴리스의 문제가 여전히 문제입니다. 그런 다음 Excel 사용자와 열거 나 공유됩니다.
HTH
다음은 csv 파일을 처음 생성 할 때 직장에서 사용하는 간단한 방법입니다. 값을 조금 변경하여 모든 응용 프로그램에 적합하지는 않습니다.
CSV의 모든 값 앞에 공백을 추가하십시오.
이 공간은 "1", "2.3"및 "-2.9e4"와 같은 숫자에서 Excel로 제거되지만 "01/10/1993"과 같은 날짜와 "TRUE"와 같은 부울로 유지되어 "TRUE"로 변환되지 않습니다. 엑셀의 내부 데이터 형식.
또한 읽을 때 큰 따옴표가 압축되지 않으므로 CSV로 텍스트를 만드는 완벽한 방법은 Excel에서도 변경되지 않습니다. 즉 (작은 따옴표를 사용하여 입력 내용을 표시) ' "3.1415"'. 그런 다음 Excel에서 항상 큰 문자열로 묶고 공백이 앞에 붙는 것을 제외하고는 항상 원래 문자열을 갖습니다. 따라서 수식 등의 문자열을 고려해야합니다.
"\xA0"
대신 공백이 아닌 공간을 사용할 수 있습니다 .
이것은 파일 자체를 엉망으로 만들지 않고 이것을 달성하는 방법을 아는 유일한 방법입니다. 평소와 마찬가지로 Excel에서 책상 위에 머리를 몇 시간 동안 두들겨서 이것을 배웠습니다.
.csv 파일 확장명을 .txt로 변경하십시오. 이렇게하면 파일을 열 때 Excel에서 파일을 자동 변환하지 않습니다. 방법은 다음과 같습니다. Excel을 빈 워크 시트로 열고 빈 시트를 닫은 다음 File => Open을 열고 .txt 확장자를 가진 파일을 선택하십시오. 그러면 Excel에서 "텍스트 가져 오기 마법사"를 열어 파일 해석 방법에 대한 질문을합니다. 먼저 구분 기호 (쉼표, 탭 등)를 선택한 다음 (중요한 부분) 열 세트를 선택하고 서식을 선택하십시오. 파일에있는 내용을 정확히 원하면 "텍스트"를 선택하면 구분 기호 사이에있는 내용 만 Excel에 표시됩니다.
awk
- 값을 날짜 등을 피하기 재 포맷 , 문제는 오히려 엑셀 함께 이상의 awk
질문 제목에도 불구하고,.
이 동일한 문제에 대해 내가 한 일은 Excel에서 파일을 열기 전에 각 CSV 값 앞에 다음을 추가하는 것입니다 : "=" ""및 CSV 값 뒤에 큰 따옴표. 예를 들어 다음 값을 사용하십시오.
012345,00198475
Excel에서 열기 전에 다음과 같이 변경해야합니다.
"="""012345","="""00198475"
이렇게하면 모든 셀 값이 Excel에서 수식으로 표시되므로 숫자, 날짜 등으로 형식이 지정되지 않습니다. 예를 들어 012345 값은 다음과 같이 나타납니다.
="012345"
1234500198475E-8
. 이런 식으로 Excel에서 추가 계산이 여전히 가능합니다.
여기에 제공된 솔루션 중 어느 것도 좋은 솔루션이 아닙니다. 개별 사례에서 작동하지만 최종 디스플레이를 제어하는 경우에만 가능합니다. 내 예를 들어 보자. 내 작품은 소매점에 판매하는 제품 목록을 만든다. 이것은 CSV 형식이며 부품 코드를 포함하며 일부는 0으로 시작하며 제조업체가 설정하지 않습니다 (우리가 통제하지 않음). 선행 0을 제거하면 실제로 다른 제품과 일치 할 수 있습니다. 소매 고객은 백엔드 처리 프로그램으로 인해 목록을 CSV 형식으로 원합니다. 백엔드 처리 프로그램은 통제 할 수 없으며 고객마다 다릅니다. 따라서 CSV 파일의 형식을 변경할 수 없습니다. 접두사 '='도없고 탭도 추가되지 않았습니다. 원시 CSV 파일의 데이터가 정확합니다. 고객이 Excel에서 해당 파일을 열면 문제가 시작됩니다. 그리고 많은 고객들이 실제로 컴퓨터에 정통하지 않습니다. 이메일 첨부 파일을 열어서 저장할 수 있습니다. 우리는 데이터를 두 가지 다른 형식으로 제공하려고합니다. 하나는 Excel과 친숙합니다 (TAB을 추가하여 위에서 제안한 옵션을 사용하고 다른 하나는 '마스터'로 사용하지만 일부 고객은 왜 그런지 이해하지 못하기 때문에 희망적인 생각이 될 수 있습니다 우리는 왜 스프레드 시트에서 때때로 '잘못된'데이터를 보는 이유를 계속 설명하고 있습니다 .Microsoft가 올바르게 변경하기 전까지는 최종 사용자의 방법을 통제 할 수없는 한 적절한 해결 방법이 없습니다. 파일을 사용하십시오. 그러나 일부 고객은 왜이 작업을 수행해야하는지 이해하지 못하기 때문에 이는 바람직한 생각 일 수 있습니다. 그 동안 스프레드 시트에 '잘못된'데이터가 표시되는 이유를 계속 설명합니다. 최종 사용자가 파일을 사용하는 방법을 제어 할 수없는 한 Microsoft가 적절히 변경하기 전까지는 이에 대한 적절한 해결책이 없습니다. 그러나 일부 고객은 왜이 작업을 수행해야하는지 이해하지 못하기 때문에 이는 바람직한 생각 일 수 있습니다. 그 동안 스프레드 시트에 '잘못된'데이터가 표시되는 이유를 계속 설명합니다. 최종 사용자가 파일을 사용하는 방법을 제어 할 수없는 한 Microsoft가 적절히 변경하기 전까지는 이에 대한 적절한 해결책이 없습니다.
"\xA0"
공백이 아닌 부분 을 추가하여 Excel의 문제를 해결할 수 있습니다 .
Excel이 아닙니다. Windows는 공식, 데이터를 날짜로 인식하고 자동 수정합니다. Windows 설정을 변경해야합니다.
"제어판"(-> "클래식보기로 전환")-> "국가 및 언어 옵션"-> "국가 옵션"-> "사용자 정의 ..."-> "숫자"-> 기호 변경 당신이 원하는 것에 따라.
http://www.pcreview.co.uk/forums/enable-disable-auto-convert-number-date-t3791902.html
예를 들어 고객의 컴퓨터에서 이러한 설정을 변경하지 않으면 데이터 대신 날짜가 표시됩니다.
안녕하세요. 같은 문제가 있습니다.
이 vbscipt를 작성하여 다른 CSV 파일을 만듭니다. 새로운 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
CSV 파일을 수정하지 않고 다음을 수행 할 수 있습니다.
Excel은 자동 날짜 형식을 무시하고 csv 셀을 텍스트 형식으로 올바르게 서식 지정하고 분리합니다.
어리석은 해결 방법이지만 가져 오기 전에 csv 데이터를 수정하는 것보다 낫습니다. Andy Baird와 Richard는이 방법을 회피했지만 몇 가지 중요한 단계를 놓쳤다.
나는 이것이 오래된 실이라는 것을 안다. 나와 같은 사람들은 여전히 powershell com object를 통해 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의 경로와 하단의 구분 문자를 변경하십시오.
필자의 경우 R을 사용하여 생성 된 CSV 파일의 "Sept8"은 Excel 2013에서 "8-Sept"로 변환되었습니다. xlsx 패키지의 write.xlsx2 () 함수를 사용하여 xlsx 형식으로 출력 파일을 생성하면 문제가 해결되었습니다. 원하지 않는 변환없이 Excel에서로드 할 수 있습니다. 따라서 csv 파일이 제공되면 write.xlsx2 () 함수를 사용하여 R로로드하고 xlsx로 변환 해 볼 수 있습니다.
Google 드라이브 (또는 Mac을 사용하는 경우 숫자)를 사용하는 해결 방법 :
또는 3 단계에서 Mac을 사용하는 경우 숫자로 데이터를 열 수 있습니다.
이 문제는 여전히 Mac Office 2011 및 Office 2013에서 발생하며이를 방지 할 수 없습니다. 그런 기본적인 것 같습니다.
필자의 경우 CSV 내에 "1-2"및 "7-12"와 같은 값이 쉼표로 올바르게 묶여 있습니다. 이는 나중에 일반 텍스트로 변환하려고하면 Excel 내의 날짜로 자동 변환됩니다. 또한 바코드 및 EAN 번호에서 발견 된 많은 수를 다시 123E + 숫자로 다시 변환 할 수없는 형식으로 다시 포맷합니다.
Google 드라이브의 Google 스프레드 시트는 숫자를 날짜로 변환하지 않습니다. 바코드에는 3 자마다 쉼표가 있지만 쉽게 제거 할 수 있습니다. MAC / Windows CSV를 다룰 때 특히 CSV를 잘 처리합니다.
누군가를 언젠가 구할 수도 있습니다.
과학적 표기법으로 계속 변환하는 신용 카드 번호로이 작업을 수행합니다. .csv를 Google 스프레드 시트로 가져옵니다. 가져 오기 옵션을 통해 숫자 값의 자동 서식을 비활성화 할 수 있습니다. 민감한 열을 일반 텍스트로 설정하고 xlsx로 다운로드합니다.
그것은 끔찍한 워크 플로우이지만 적어도 내 가치는 그대로 유지됩니다.
이 vba 매크로를 작성하여 기본적으로 출력 범위를 텍스트로 붙여서 숫자를 붙여 넣었습니다. Excel에서 날짜로 해석하지 않고 8/11, 23/6, 1/3 등의 값을 붙여 넣을 때 나에게 완벽하게 작동합니다.
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 솔루션을 보지 못했습니다. 이 코드는 원래 형식으로 데이터를 유지합니다.