UTF8 데이터를 Excel로 내보내는 가장 좋은 방법은 무엇입니까?
UTF8 데이터를 지원하는 웹 앱이 있습니다.만세 UTF8또한 사용자가 제공한 데이터를 CSV로 내보낼 수 있습니다. 이 데이터는 현재도 UTF8에 있습니다.문제는 Excel에서 일반적인 UTF8 CSV를 열면 ANSII 인코딩 텍스트로 읽히고 이에 따라 ly 및 ü 등의 2바이트 문자를 2개의 개별 문자로 읽으려고 하면 오류가 발생한다는 것입니다.
그래서 좀 더 알아봤는데(인터벌 사람들은 여기에 흥미로운 글을 올렸습니다), 세상에는 제한적이지만 터무니없이 짜증나는 선택지가 몇 가지 있습니다.그 중:
- UTF-16 Little Endian TSV 파일 제공. Excel은 올바르게 해석하지만 여러 줄의 데이터를 지원하지 않습니다.
- Excel mime 유형 또는 파일 확장자를 사용하여 HTML 테이블의 데이터 제공(이 옵션이 UTF8을 지원하는지 확실하지 않음)
- XML 데이터를 다양한 최신 버전의 Excel로 가져오는 방법에는 이론적으로 UTF8을 지원하는 방법이 서너 가지가 있습니다.스프레드시트 ML, 커스텀 XSLT를 사용하거나 템플릿을 통해 새로운 Excel XML 형식을 생성합니다.
어떤 일이 있어도 Excel용으로 사용하지 않는 분들을 위해 오래된 CSV 파일을 제공하고 Excel용으로 별도의 다운로드 옵션을 제공할 것입니다.
스택 오버플로우 여러분, UTF8을 올바르게 지원하는 Just-For-Excel 파일을 생성하는 가장 간단한 방법은 무엇입니까?이 가장 간단한 옵션이 최신 버전의 Excel만 지원한다고 해도 여전히 관심을 끌고 있습니다.
이것은 Rails 스택으로 하고 있습니다만, 어떻게 되었는지 궁금하네요.모든 프레임워크의 인터넷 사용자 및 사용자가 이 문제를 처리합니다.저도 몇 가지 다른 환경에서 일하고 있는데, 이것은 분명히 다시 일어날 문제입니다.
업데이트 2010-10-22:이 질문을 처음 게시했을 때 우리는 타임 트래킹 시스템 Tempo의 Ruport gem을 사용하여 CSV export를 제공하고 있었습니다.제 동료 중 한 명인 에릭 홀렌스비가 Ruport용 빠른 필터를 조립하여 실제 Excel XSL 출력을 제공했습니다. 그래서 다른 루비 사이트에는 이 필터를 공유해야겠다고 생각했습니다.
require 'rubygems'
require 'ruport'
require 'spreadsheet'
require 'stringio'
Spreadsheet.client_encoding = "UTF-8"
include Ruport::Data
class Ruport::Formatter::Excel < Ruport::Formatter
renders :excel, :for => Ruport::Controller::Table
def output
retval = StringIO.new
if options.workbook
book = options.workbook
else
book = Spreadsheet::Workbook.new
end
if options.worksheet_name
book_args = { :name => options.worksheet_name }
else
book_args = { }
end
sheet = book.create_worksheet(book_args)
offset = 0
if options.show_table_headers
sheet.row(0).default_format = Spreadsheet::Format.new(
options.format_options ||
{
:color => :blue,
:weight => :bold,
:size => 18
}
)
sheet.row(0).replace data.column_names
offset = 1
end
data.data.each_with_index do |row, i|
sheet.row(i+offset).replace row.attributes.map { |x| row.data[x] }
end
book.write retval
retval.seek(0)
return retval.read
end
end
웹 페이지의 charset 인코딩을 utf-8로 설정한 후 Response로 설정하면 알 수 있습니다.바이너리 CSV 파일 상단에 UTF-8 바이트 순서 마크(0xEF 0xBB 0xBF)를 기입하면 Excel 2007(다른 버전은 확실하지 않음)이 utf-8로 인식되어 올바르게 열립니다.
몇 시간 동안 같은 문제로 고군분투한 후 나는 그 주제에 대한 이 훌륭한 게시물을 발견했다.
http://blog.plataformatec.com.br/2009/09/exporting-data-to-csv-and-excel-in-your-rails-app/의 견적:
Excel-friendly-CSV에 대처하기 위한 3가지 규칙은 다음과 같습니다.
- 쉼표가 아닌 표를 사용합니다.
- 필드에 줄바꿈을 포함할 수 없습니다.
- UTF-16 Little Endian을 사용하여 사용자에게 파일을 전송합니다.Little Endian BOM을 수동으로 포함합니다.
단, 루비를 사용하고 있다면 문제가 해결됩니다.먼저 FasterCSV gem을 사용할 수 있습니다.
하지만 저는 뛰어난 스프레드시트를 직접 생성하는 스프레드시트 보석을 사용하게 되었습니다(링크 제한이 있습니다.구글 스프레드시트+루비포지뿐입니다) 훌륭합니다!
OleDB 데이터 원본 및 Excel Interop을 만드는 것을 잊었지만 이러한 데이터 원본 및 Excel Interop에도 문제가 있습니다.
스프레드시트를 추천합니다.ML 옵션이 기능은 매우 잘 작동합니다.사용하시는 플랫폼에는 XML 파일을 빌드하기 위한 적절한 툴이 있으며 OfficeXP까지 완전히 지원됩니다.Office2000은 지원되지 않지만 개인 경험상 동작은 제한적입니다.
utf 인코딩을 사용하여 XML을 만들고 .xls로 저장하면 다음 2바이트 문자도 열립니다.
xml version="1.0" encoding="utf-8"
저는 UTF8 데이터를 Excel로 보내는 것과 똑같은 문제가 있었습니다.솔루션:
Perl 스프레드시트의 현재 버전:WriteExcel cpan 코드는 UTF8 데이터를 사용하여 Excel 파일을 올바르게 씁니다.
그래서 저는 Rails 플러그인을 썼습니다.a) Perl 프로그램에 대한 양방향 파이프를 열고 b) 데이터를 Perl 프로그램에 한 번에 한 줄씩 전송합니다.메시지 데이터 형식으로는 Yaml을 사용합니다.(표준 Ruby yaml은 UTF8이 아닙니다.특수 버전이 있습니다.ya2yaml) c) Perl 프로그램은 Excel 파일을 만듭니다.Rails 프로그램이 마지막 행이 전송되었음을 (yaml 메시지를 통해) 나타내면 Perl 프로그램은 Excel 파일을 생성하고 상태를 Rails 프로그램으로 되돌립니다.
물론 병렬 프로세스와 파이프를 통해 레일 프로젝트에 Perl 프로그램을 추가하는 것은 "컴퓨터 과학"이 아니라 "엔지니어링" 영역에 매우 가깝습니다(작업은 완료되지만 우아하지는 않습니다).하지만 잘 작동했고, WriteExcel 코드를 Ruby에 이식하는 데 걸리는 시간을 몇 주나 줄였습니다.또한 WriteExcel의 현재 사용 가능한 Ruby 포트는 utf8을 지원하지 않습니다.
내 소프트웨어는 허용 가능한 오픈 소스이지만 아직 출시할 시간이 나지 않았습니다.현재의 상태로 하는 경우는, http://sandbox.kluger.com/write_excel_v.5.tar 를 참조해 주세요.
Rails 컨트롤러 프로세스가 아닌 백그라운드프로세스로 엑셀 파일을 작성하면 엑셀 파일을 생성하면서 다른 브라우저 클라이언트가 차단되기 때문에 작성해야 합니다.Delayed Job 플러그인을 사용하고 있으며, 잘 작동합니다.
이게 도움이 됐으면 좋겠는데
래리야.
왜 Excel이 utf-8 문자의 CSV를 제대로 로드하지 못하는지에 대한 Ruby 답변을 찾고 있었습니다.이 솔루션을 검색하고 실험한 결과, 다음과 같은 이점이 있었습니다.
csv_content = CSV.generate(col_sep: "\t", headers: :first_row, encoding: 'utf-8') do |csv|
csv << ["header1", "header2"]
csv << ["content1", "content2"]
end
write_content = Iconv.conv("utf-16le", "utf-8", "\xEF\xBB\xBF")
write_content += Iconv.conv("utf-16le", "utf-8", csv_content)
File.open("listing.csv", 'wb') {|f| f.write(write_content) }
Excel은 UTF-8을 정상적으로 처리하지 않습니다.대신 요구를 충족하는 코드 페이지를 사용해야 합니다.
Response.ContentType = "text/plain";
// codepage: 28591, codepage name:iso-8859-1, codepage display name: Western European (ISO)
Response.ContentEncoding = System.Text.Encoding.GetEncoding(28591);
OpenOffice Calc를 사용해 보십시오.UTF-8 인코딩을 사용한 CSV 파일 Import 및 내보내기 모두 유니코드 친화적입니다.
언급URL : https://stackoverflow.com/questions/451636/whats-the-best-way-to-export-utf8-data-into-excel
'programing' 카테고리의 다른 글
| 부호 없는 정수 오버플로를 검출하려면 어떻게 해야 합니까? (0) | 2023.04.19 |
|---|---|
| Excel의 mod 함수와 동등한 VBA (0) | 2023.04.19 |
| WPF: 대화 상자/프롬프트 생성 (0) | 2023.04.14 |
| 파워셸에서 머리, 꼬리, 더, 덜, 더, 덜, 더, 더, 더, 더, 더, 더, 더, 더, 더, 더, 더, 어떻게 하는 (0) | 2023.04.14 |
| SQL Server - 클러스터된 인덱스와 비클러스터된 인덱스를 사용할 때 (0) | 2023.04.14 |