2010-12-21 77 views
0

我有一个小型ASP.NET应用程序,它从表中读取数据并将其作为Excel电子邮件中的Excel附件发送出去。这些数据只是HTML表格标记的数据。我发送消息的方式是由下面的代码:Excel 2007将导出的内存流数据转换为公式

byte[] data = GetData(excelData); 
MemoryStream memoryStream = new MemoryStream(data); 
mm.Attachments.Add(new Attachment(memoryStream, "info.xls", "text/plain")); 

在Excel 2003中,但由于某种原因,Excel 2007中这已经工作正常不停地尝试整件事转化为一个公式,我得到一个“细胞数据太长“错误。我尝试过搜索,但无法找到任何具体的关于为什么这可能发生在07年或解决它的简单方法。我知道07可能处理的数据与03有点不同,但如果可能的话,我没有太多时间致力于重新编写此应用程序。有没有人有任何建议,为此容易解决?

回答

1

因此,CSV解决方案对我来说不是很理想,因为我需要格式化数据。我落得这样做改变了上面的代码中的第一行是:

System.Text.Encoding enc = Encoding.UTF8; 
byte[] data = enc.GetBytes(excelData); 

UTF8是唯一字节编码,将正确地与一个警告显示在Excel 2007中我的HTML表格 - 由于某种原因,即使它现在正在使用UTF-8,它没有正确显示特殊字符。对此问题进行修复是开始在ExcelData文本,我出口我的HTML表格之前,补充一点:

<HEAD><META http-equiv=Content-Type content='text/html; charset=utf-8'></HEAD> 

我不知道为什么它需要的相同的编码在2个不同地点得到的一切工作正常。有可能比HTML表格更好地导出到Excel,但这是一个快速而简单的解决方案,不需要任何优雅的问题。希望这可以帮助其他人。

0

保存为.xls的HTML是黑客。它可以节省时间,但不能保证它可以在每个Excel版本中运行。如果您可以避开它,我建议将数据保存为CSV并将其作为.csv文件发送出去。当Excel转换文件时,用户可能必须多次单击“确定”,但每个Excel版本都可以加载CSV文件。

如果您确实需要.XLS格式,您可能需要调查第三方库(如FlexCel),或者通过Excel Interop(不建议在服务器上)工作。

+0

这很简单,但我不能做基本的格式化,如使用csv居中(这不是很重要),但特殊字符在csv文件中也不能正确呈现,但它们在xls文件中。我有MailMessage编码集,它显示电子邮件本身中的特殊字符,但有什么方法可以正确编码csv附件? – novacara 2011-01-06 17:29:37