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

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

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

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

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

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

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

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

감사

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

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



답변

공백 문자가 데이터의 일부인 경우에만 필드 시작 부분에 공백 문자가 있어야합니다. 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에 패키지 / 라이브러리가 있습니다.

답변

많은 조정을 거친 후 임베디드 줄 바꿈 형식이 표준 에 따르지 않지만 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);


답변

최근 비슷한 문제가 있었고 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에서 다르게 작동 할 수도 있지만 시도해 볼 가치가 있다고 생각합니다.

이게 도움이 되길 바란다 😉


답변

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

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


답변

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

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


답변

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

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


답변

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

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

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

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

""text" + NL + "text""

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

2

데이트

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

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