Excel 용 CSV 파일 생성, 값 내에 줄 바꿈이있는 방법


158

Excel 용 파일을 생성 해야하는 데이 파일의 일부 값에 여러 줄이 포함되어 있습니다.

영어가 아닌 텍스트도 포함되어 있으므로 파일은 유니 코드 여야합니다.

내가 생성하는 파일은 이제 다음과 같습니다 (UTF8에서 영어가 아닌 텍스트가 혼합되어 많은 행이 있음)

Header1,Header2,Header3
Value1,Value2,"Value3 Line1
Value3 Line2"

여러 줄 값은 큰 따옴표로 묶고 보통 줄 바꿈 문자로 묶습니다.

내가 웹에서 발견 한 것으로 작동하지만 적어도 Excel 2007 및 UTF8 파일을 얻지는 못했지만 Excel은 세 번째 줄을 첫 번째 데이터 행의 두 번째 줄이 아닌 두 번째 데이터 행으로 처리합니다. .

이것은 고객의 컴퓨터에서 실행되어야하며 Excel 버전을 제어 할 수 없으므로 Excel 2000 이상에서 작동하는 솔루션이 필요합니다.

감사

편집 : 두 가지 CSV 옵션, Excel (유니 코드, 탭 구분, 필드에 줄 바꿈 없음) 및 나머지 세계 (UTF8, 표준 CSV)에 대한 두 가지 CSV 옵션을 사용하여 문제를 "해결했습니다".

내가 찾고있는 것이 아니라 적어도 작동합니다 (지금까지)


1
참고 :이 모든 것이 LibreOffice에서 완벽하게 작동하며 CSV를 가져 오는 것이 훨씬 쉽습니다.
user2061057

9
추가 공간에 대한 허용 된 답변은 질문을 편집하고 공백을 제거했기 때문에 매우 혼란 스럽습니다 ...
Matti Virkkunen

답변:


70

공백 문자가 데이터의 일부인 경우에만 필드 시작 부분에 공백 문자가 있어야합니다. Excel은 선행 공백을 제거하지 않습니다. 제목과 데이터 필드에 원하지 않는 공간이 생깁니다. 더 나쁜 것은 "세 번째 열의 줄 바꿈이 필드의 시작 부분이 아니기 때문에 무시되는 것입니다.

파일에 비 ASCII 문자 (UTF-8로 인코딩 됨)가있는 경우 파일 hex EF BB BF시작 부분에 UTF-8 BOM (3 바이트 )이 있어야합니다. 그렇지 않으면 Excel은 utf-8 대신 로케일의 기본 인코딩 (예 : cp1252)에 따라 데이터를 해석하고 ASCII가 아닌 문자는 휴지통에 버립니다.

다음 의견은 Excel 2003, 2007 및 2013에 적용됩니다. Excel 2000에서 테스트되지 않음

Windows 탐색기에서 파일 이름을 두 번 클릭하여 파일을 열면 모든 것이 정상적으로 작동합니다.

Excel 내에서 열면 결과가 다릅니다.

  1. 파일에는 ASCII 문자 만 있고 BOM은 없습니다 : 작동합니다.
  2. 파일에 ASCII가 아닌 문자 (UTF-8로 인코딩 됨)가 UTF-8 BOM으로 시작됩니다. 데이터가 UTF-8로 인코딩되었음을 인식하지만 csv 확장자는 무시하고 텍스트 로 이동시킵니다. 불행히도 줄 바꿈 문제가 발생하여 not-a-Wizard 를 가져옵니다.

옵션은 다음과 같습니다.

  1. Excel 내에서 파일을 열지 않도록 사용자를 교육하십시오.
  2. XLS 파일을 직접 작성하는 것을 고려하십시오 .Python / Perl / PHP / .NET / etc에 패키지 / 라이브러리가 있습니다.

1
감사합니다. 문제의 주요 공백 ​​문제를 해결하고 CSV 예제를 수동으로 입력하고 실제 파일에서 복사하여 붙여 넣지 않았습니다. 실제 파일에는 해당 공백이 포함되어 있지 않습니다.
Nir

@Nir : 이제 실제 문제에 대해 이야기 해 봅시다. 따라서 UTF-8 BOM이 있고 Excel에서 파일을 열고 Value3 줄 바꿈이 "보호"되어야 함을 텍스트 가져 오기 마법사가 인식하지 못했음을 의미합니까? 아니면 UTF-8 BOM이 없었고 TIW에 데이터가 UTF-8로 인코딩되어 있으며 줄 바꿈이 계속되었다고 TIW에 알려 주어야합니까?
John Machin

사용하려면 어떻게합니까 | 필드 구분 기호로, 줄을 레코드 구분 기호로 사용하려면 "를 사용하여 텍스트 필드의 내용을 보호하십시오. 텍스트 필드에는 |,"및 새 줄이 포함될 수 있습니다. 이게 가능해?
Giorgio

1
참고 : Redmine 시스템에서 Excel2007 및 CSV를 내보냈습니다. Excel은 UTF-8 BOM (EFBBBF)을 처음에 추가 한 후 파일을 완벽하게 열었습니다. "문제 설명"열에 포함 된 줄 바꿈이 올바르게 처리되고 행 구조가 손상되지 않으며 모든 자국 문자가 올바르게 읽 힙니다 (UTF8 BOM없이 읽을 때 휴지통에 표시됨). Excel은 텍스트 가져 오기 마법사도 표시하지 않았습니다. 현재 해당 CSV에는 EFBBBF헤더가 0A있으며 행 구분 기호로 사용 되며 0D0A텍스트 셀의 문자열 내부에서 줄 바꿈으로 사용 됩니다 .
quetzalcoatl

1
당신은 당신이 제대로 CSV, 읽기 OS X 용 Excel을 얻으려고 노력하는 경우 뿐만 아니라 Windows 용 엑셀, 여기에 훌륭한 자원이다 : stackoverflow.com/questions/4348802/...
알렉산더 R. Janini

25

많은 조정을 거친 후 임베디드 줄 바꿈 형식이 표준 에 따르지 않지만 Linux에서 파일을 생성하고 Windows + Excel에서 읽는 구성이 있습니다 .

  • 필드 내의 줄 바꿈은 \ n이어야합니다 (그리고 분명히 큰 따옴표로 인용).
  • 레코드 끝 : \ r \ n
  • 같음으로 필드를 시작하지 않아야합니다. 그렇지 않으면 수식으로 처리되고 잘립니다.

Perl에서는 Text :: CSV를 사용하여 다음과 같이했습니다.

use Text::CSV;

open my $FO, ">:encoding(utf8)", $filename or die "Cannot create $filename: $!";
my $csv = Text::CSV->new({ binary => 1, eol => "\r\n" });

#for each row...:
$csv -> print ($FO, \@row);

3
그렇습니다. Windows + Excel, OSX + Numbers 및 Google Docs에서 작동하는지 확인할 수 있습니다.
Yorick Sijsling

3
"로 둘러싸인 필드에서 \ n (또한 시도한 \ n)을 사용하고 행을 파생시키기 위해 \ r \ n을 사용합니다. Excel 2010에서는 여전히이 문제를 해결하지 못했습니다. ANSI 및 UTF8-with-BOM을 시도했습니다. 성공하지 못함
nl-x

1
그러나 이것은 내가 사용하기 때문입니다 | 필드 구분자로. 내가 사용하면; 필드 구분 기호로 CSV 데이터를 가져올 때 여전히 문제가 발생하지만 파일 탐색기에서 CSV를 두 번 클릭하여 열면 문제가 사라집니다.
nl-x

2
Ian의 대답은 Windows 7의 Excel 2003/2010에서 작동하지 않습니다. 16 진수 편집기를 사용하여 UTF-8 BOM 파일을 편집하려고 시도하고 '0D0A'비트에서 0D (\ r)를 제거했습니다 (\ r \ n) 필드 내의 개행. 그러나 작동하지 않습니다.
Dan W

이 답변은 Excel 2010 및 WIndows 7을 사용하여 제로 수정되었습니다! cygwin과 함께 제공되는 perl v5.14.2도 사용합니다. 내 포함 된 개행은 모두 \n였습니다. 감사합니다
ardnew

21

최근 비슷한 문제가 있었고 HTML 파일 을 가져 와서 해결했습니다 . 기준 예는 다음과 같습니다.

<html xmlns:v="urn:schemas-microsoft-com:vml"
xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:x="urn:schemas-microsoft-com:office:excel"
xmlns="http://www.w3.org/TR/REC-html40">
  <head>
    <style>
      <!--
      br {mso-data-placement:same-cell;}
      -->
    </style>
  </head>
  <body>
    <table>
      <tr>
        <td>first line<br/>second line</td>
        <td style="white-space:normal">first line<br/>second line</td>
      </tr>
    </table>
  </body>
</html>

CSV가 아니며 다양한 버전의 Excel에서 다르게 작동 할 수도 있지만 시도해 볼 가치가 있다고 생각합니다.

이게 도움이 되길 바란다 ;-)


35
@GusDeCooL OP의 첫 문장의 문구 "Excel 용 파일을 생성해야합니다.이 파일의 일부 값에는 여러 줄이 포함되어 있습니다." CSV 파일 일 필요는 없습니다. 또한 Q & A 형식은 다른 독자에게도 적용되며 OP를 통해 CSV를 사용해야하더라도 일부 독자에게 적합한 선택 일 수 있습니다. 귀하의 공감 비가 부당하다고 생각합니다 (여전히 이유를 설명해 주셔서 감사합니다).
dtldarek

1
이것은 실제로 저에게 가장 좋은 옵션이었습니다. 제안 해 주셔서 감사합니다!
Jordan Gray

8

.CSV 파일에 줄 바꿈이 포함 된 큰 따옴표로 묶은 필드가있는 경우 .CSV 파일이 UTF-8 형식으로 작성된 경우 Excel에서 .CSV 파일을 올바르게 가져 오지 않습니다. Excel은 줄 바꿈을 마치 CR / LF 인 것처럼 취급하고 새 줄을 시작합니다. 스프레드 시트가 깨졌습니다. 세미콜론이 쉼표 대신 필드 구분 기호로 사용되는 경우에도 마찬가지입니다.

이 문제는 Windows 메모장을 사용하여 .CSV 파일을 편집하고 파일> 다른 이름으로 저장 ...을 사용하여 파일을 저장하고 파일을 저장하기 전에 파일 인코딩을 UTF-8에서 ANSI로 변경하여 해결할 수 있습니다. 파일이 ANSI 형식으로 저장되면 Windows 7 Professional에서 실행되는 Microsoft Excel 2013이 파일을 올바르게 가져옵니다.


7

쉼표 나 탭 대신 세미콜론을 구분 기호로 사용하고 따옴표를 사용하면 값 내부의 줄 바꿈이 작동하는 것 같습니다.

이것은 Excel 2010과 Excel 2000에서 모두 효과적입니다. 그러나 놀랍게도 파일 가져 오기 기능을 사용하여 기존 스프레드 시트로 파일을 가져올 때가 아니라 파일을 새 스프레드 시트로 열 때만 작동합니다.


네,하지만 엑셀에서 세미콜론으로
끝줄

실제 텍스트 데이터 중 일부에 세미콜론이 있으면 어떻게됩니까? 이것은 작동하지 않습니다.
htm11h

4

PC에서 ASCII 문자 # 10은 값 내에 개행을 배치하려는 것입니다.

그러나 Excel로 가져 오면 여러 줄 셀에 대해 줄 바꿈을 설정해야합니다. 그렇지 않으면 줄 바꿈이 사각형 상자로 표시됩니다.


3

파일을 EXCEL로 가져 오려고하면 작동하지 않습니다.

파일 확장자 csv를 EXCEL.EXE와 연결하여 csv 파일을 두 번 클릭하여 EXCEL을 호출 할 수 있습니다.

여기에 텍스트 뒤에 NewLine Char 다음에 텍스트를 추가하고 전체 문자열을 큰 따옴표로 묶습니다.

EXCEL은 문자열의 일부를 다음 셀에 배치하므로 CR을 사용하지 마십시오.

""text" + NL + "text""

EXCEL을 호출하면이 메시지가 나타납니다. 높이를 자동으로 조정해야 할 수도 있습니다. 줄 바꿈 위치는 셀 너비에 따라 다릅니다.

2

데이트

기본 코드는 다음과 같습니다.

CHR$(34,"2", 10,"DATE", 34)

2

나는 이것을 발견했고 그것은 나를 위해 일했다.

$delimiter = ',';
$enc1 = '"';
$enc2 = '""';

그런 다음 물건을 묶어야하는 곳

$myfile = ('/path/to/myfile.csv');
//erase any previous contents
$fp = fopen($myfile, 'w+');
fwrite($fp, $enc1 .  'Column Heading 1' . $enc1 . $delimiter );
//append to new file
$fp2 = fopen($myfile, 'a');
fwrite($fp2, $enc1 .  'Column Heading 2' . $enc1 . $delimiter );

.....

fwrite($fp2, $enc1 .  'Last Column Heading' . $enc1 . $delimiter. PHP_EOL );

그런 다음 ""를 포함하는 HTML과 같이 무언가를 작성해야 할 때

fwrite($fp2, $enc2 .  $myhtmlstring . $enc2 . $delimiter);

줄 바꿈 . PHP_EOL

스크립트의 끝은 사용자가 파일을 다운로드 할 수 있도록 링크를 인쇄합니다.

echo 'Click <a href="myfile.csv">here</a> to download file';

1

BOM이 포함 된 UTF 파일은 Excel에서 해당 필드의 따옴표로도 새 줄을 문자 그대로 처리합니다. (테스트 된 Excel 2008 Mac)

해결책은 줄 바꿈 대신 새 줄을 캐리지 리턴 (CHR 13)으로 만드는 것입니다.


Excel 2016에는 UTF8 BOM이 있어도 CSV 파일을 올바르게 처리하는 것 같습니다. 그러나 모든 차이점을 만든 것은 ';' 필드 구분 기호로 사용합니다 ( ','를 소수점 구분 기호로 사용하는 모든 로캘에 대해 Excel에서 수행하는 작업).
Ale

1

이것을 테스트하십시오 : 그것은 나를 위해 완전히 작동합니다 : xxxx.csv파일에 다음 줄을 넣으십시오

hola_x,="este es mi text1"&CHAR(10)&"I sigo escribiendo",hola_a

hola_y,="este es mi text2"&CHAR(10)&"I sigo escribiendo",hola_b

hola_z,="este es mi text3"&CHAR(10)&"I sigo escribiendo",hola_c

엑셀로여십시오.

경우에 따라 직접 열리면 열 대 데이터 변환을 사용해야합니다. 열 너비를 확장하고 텍스트 줄 바꿈 단추를 누르십시오. 또는 셀 서식을 지정하고 줄 바꿈 텍스트를 활성화하십시오.

다른 제안에 감사하지만 그들은 나를 위해 작동하지 않았습니다. 나는 순수한 창문 환경에 있으며 유니 코드 또는 다른 재미있는 것을 가지고 놀고 싶지 않았습니다.

이렇게하면 CSV에서 Excel로 수식을 넣을 수 있습니다. 이 작업 방법에는 여러 가지 용도가있을 수 있습니다. (따옴표 앞에 = 표시)

pd : 당신의 제안에 코드뿐만 아니라 일부 데이터 샘플을 넣으십시오.


1

각 행의 끝에 "\ r"을 넣으면 실제로 줄 바꿈 효과가 있었지만 .csv에서는 사라지고 공간이없고 줄 바꿈이없는 다음 행에 대해 각 행이 찌그러지는 추한 혼란을 남겼습니다.


0

우리가하는 방법 (VB.Net 사용)은 큰 따옴표를 나타내는 문자 인 Chr (34)에서 텍스트를 줄 바꿈으로 묶고 LF의 모든 CR-LF 문자를 대체하는 것입니다.


0

일반적으로 새 줄은 "\ r \ n"입니다. CSV에서 "\ r"을 빈 값으로 바꿨습니다. 다음은 자바 스크립트 코드입니다.

cellValue = cellValue.replace(/\r/g, "")

MS Excel에서 CSV를 열면 제대로 작동합니다. 값에 여러 줄이 있으면 Excel 시트에서 하나의 단일 셀 내에 유지됩니다.


0

를 들어 파일 열기는 단지 구문은

 ,"one\n
 two",...

중요한 것은 첫 번째 ","뒤에 공백없다는 것입니다 . 일반적으로 공백은 좋으며 문자열을 인용하지 않으면 잘립니다. 그러나 그렇지 않으면 불쾌합니다. 알아내는 데 시간이 걸렸습니다.

줄이 \ n 또는 \ c \ n로 끝나도 상관 없습니다.

수식 표시 줄을 확장하여 셀의 텍스트를 실제로 볼 수 있는지 확인하십시오 (긴 하루를 보낸 후 나에게 보내십시오 ...)

물론 파일 열기는 UTF-8을 제대로 지원하지 않습니다 (트릭을 사용하지 않는 한).

Excel> 데이터> 외부 데이터 가져 오기 > 텍스트에서

UTF-8 모드 로 설정할 수 있습니다 (글꼴 목록 아래로). 그러나이 경우 새 줄이 작동하지 않는 것 같아서 해결할 방법이 없습니다.

(30 년 후 MS는이 자료를 올바르게 얻을 수있을 것입니다.)


0

파일을 가져 오는 동안 Excel 365에서 :

데이터-> 텍스트 / CSV에서-> 파일 선택> 데이터 변환-> 데이터 소스 구성-> 데이터 소스 선택-> 소스 편집 클릭-> 줄 바꿈 드롭 다운에서 따옴표 안의 줄 바꿈 무시를 선택하십시오.

위의 텍스트는 포르투갈어로 번역되었으므로 영어의 표현이 다를 수 있습니다.


-1

당신은 다음을 할 수 있습니다 "\"Value3 Line1 Value3 Line2\"". 자바에서 CSV 파일을 생성하는 데 효과적입니다.


-2

JavaScript를 사용하는 흥미로운 접근법은 다음과 같습니다.

  String.prototype.csv = String.prototype.split.partial(/,\s*/);  

  var results = ("Mugan, Jin, Fuu").csv();                        

  console.log(results[0]=="Mugan" &&                                   
         results[1]=="Jin" &&                                     
         results[2]=="Fuu",                                       
         "The text values were split properly");                  

-3

<br/>내용에 HTML 줄 바꿈 을 인쇄하고 Excel에서 열면 모든 Excel에서 잘 작동합니다.


-3

단축키 ALT + Enter를 사용할 수 있습니다.

  1. 편집하려는 셀을 선택하십시오
  2. 편집 모드를 두 번 클릭하거나 F2를 눌러 편집 모드로 들어갑니다. 3. Alt + Enter를 누릅니다. 이것은 셀에 새로운 줄을 만들 것입니다

어떻게 CVS 파일 생성에 통합합니까?
jikuja
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.