因此,我们有一个支持UTF8数据的web应用程序。万岁UTF8.而且我们可以将用户提供的数据导出到CSV中,没有问题--到那时它还在UTF8中。问题是,当您在Excel中打开一个典型的UTF8 CSV时,它会将它读取为ANSII编码的文本,然后尝试将两个字节的字符(例如,和ü)读取为两个不同的字符,结果会失败。
因此,我已经做了一些调查(人们有一个有趣的帖子关于这里),还有一些有限的,即使是荒谬的恼人的选择。其中:
看起来无论如何,我可能会继续为那些没有在Excel上使用它的人提供一个普通的CSV文件,并为Excel提供一个单独的下载选项。
有什么最简单的方法来生成正确支持UTF8 (我亲爱的Stack Overflowers )的仅为Excel的文件?如果这个最简单的选项只支持最新版本的Excel,那还是很有趣的。
我是在Rails堆栈上这样做的,但好奇的是..Net ers和任何框架上的人员是如何处理这个问题的。我自己在几个不同的环境中工作,这肯定是一个会再次出现的问题。
更新2010-10-22:当我第一次发布这个问题时,我们已经在我们的时间跟踪系统节拍中使用Ruport来提供CSV出口。我的同事之一埃里克·霍伦斯比( Erik Hollensbee )为Ruport组装了一个快速过滤器,为我们提供了实际的Excel输出,我想我可以在这里分享给其他红宝石专家:
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
endhttps://stackoverflow.com/questions/451636
复制相似问题