当前位置:  开发笔记 > Android > 正文

将UTF8数据导出到Excel的最佳方法是什么?

如何解决《将UTF8数据导出到Excel的最佳方法是什么?》经验,为你挑选了3个好方法。

所以我们有这个支持UTF8数据的网络应用程序.万岁UTF8.我们可以将用户提供的数据导出为CSV没问题 - 此时它仍然是UTF8.问题是当你在Excel中打开一个典型的UTF8 CSV时,它会将其读作ANSII编码文本,并因此尝试读取两个字节的字符,如ø和ü作为两个单独的字符,最终会失败.

所以我已经做了一些挖掘(Intervals人员在这里有一个有趣的帖子),并且有一些有限的,如果有可笑的烦人选择.其中:

提供一个UTF-16 Little Endian TSV文件,Excel将正确解释,但不支持多行数据

使用Excel mime类型或文件扩展名在HTML表格中提供数据(不确定此选项是否支持UTF8)

在理论上,有三种或四种方法可以将XML数据导入各种最新版本的excel,并且这些方法将支持UTF8.SpreadsheetML,使用自定义XSLT,或通过模板生成新的Excel XML格式.

看起来无论如何,我可能会继续为那些不使用它的人提供一个普通的CSV文件,以及一个单独的Excel下载选项.

生成那个能正确支持UTF8的Just-For-Excel文件的最简单方法是什么,亲爱的Stack Overflowers?如果最简单的选项仅支持最新版本的Excel,那仍然是有意义的.

我在Rails堆栈上执行此操作,但很奇怪.Net-ers和任何框架上的人员如何处理这个问题.我自己在几个不同的环境中工作,这绝对是一个将再次出现的问题.

更新2010-10-22:我们在时间跟踪系统Tempo中使用Ruport gem在我第一次发布此问题时提供CSV导出.我的一个同事Erik Hollensbee为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

Andrew Csont.. 9

我发现如果你将网页的charset编码设置为utf-8,然后在csv文件的顶部设置响应.BinaryWrite UTF-8字节顺序标记(0xEF 0xBB 0xBF),那么Excel 2007(不确定其他版本)将其识别为utf-8并正确打开它.



1> Andrew Csont..:

我发现如果你将网页的charset编码设置为utf-8,然后在csv文件的顶部设置响应.BinaryWrite UTF-8字节顺序标记(0xEF 0xBB 0xBF),那么Excel 2007(不确定其他版本)将其识别为utf-8并正确打开它.



2> Alexis Perri..:

经过几个小时的同样问题的挣扎后,我找到了关于这个主题的优秀帖子

http://blog.plataformatec.com.br/2009/09/exporting-data-to-csv-and-excel-in-your-rails-app/ quote:

因此,这些是处理Excel-friendly-CSV的三个规则:

    使用制表,而不是逗号.

    字段不得包含换行符.

    使用UTF-16 Little Endian将文件发送给用户.并手动包含Little Endian BOM.

但是,如果您使用ruby,则问题就解决了:首先您拥有FasterCSV gem

但我最终使用电子表格gem直接生成excell电子表格(我有链接限制,只是谷歌电子表格+ ruby​​forge)很棒!



3> Joel Coehoor..:

您忘记创建OleDB数据源和Excel Interop,但这些也存在问题.

我推荐SpreadsheetML选项.它工作得很好,可能你的平台有一些不错的工具来构建xml文件,并且它早在OfficeXP就完全支持了.不支持Office2000,但个人经验是它以有限的方式工作.

推荐阅读
小色米虫_524
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有