如何在打开以编程方式生成的Excel文件时避免警告

时间:2013-11-15 14:16:14

标签: c# excel

我以编程方式使用xml生成excel文件。在尝试打开文件时,我收到以下消息:

“您尝试打开的文件'MyFile.xls'的格式与文件扩展名指定的格式不同。在打开文件之前,请验证文件是否已损坏且来自受信任的来源。想立即打开文件?“

当用户按“是”时,文件打开没有问题。但是这个警告和需要额外点击是令人讨厌的。你能否建议我如何摆脱它?

这是我的代码的一部分:

        var stream = File.Create(path);
        var w = new XmlTextWriter(stream, null); // Creates the XML writer from pre-declared stream.

        //First Write the Excel Header
        w.WriteStartDocument();
        w.WriteProcessingInstruction("mso-application", "progid='Excel.Sheet'");

        w.WriteStartElement("Workbook");
        w.WriteAttributeString("xmlns", "urn:schemas-microsoft-com:office:spreadsheet");
        w.WriteAttributeString("xmlns", "o", null, "urn:schemas-microsoft-com:office:office");
        w.WriteAttributeString("xmlns", "x", null, "urn:schemas-microsoft-com:office:excel");
        w.WriteAttributeString("xmlns", "ss", null, "urn:schemas-microsoft-com:office:spreadsheet");
        w.WriteAttributeString("xmlns", "html", null, "http://www.w3.org/TR/REC-html40");

        w.WriteStartElement("DocumentProperties");
        w.WriteAttributeString("xmlns", "urn:schemas-microsoft-com:office:office");
        w.WriteEndElement();

        // Creates the workbook
        w.WriteStartElement("ExcelWorkbook");
        w.WriteAttributeString("xmlns", "urn:schemas-microsoft-com:office:excel");
        w.WriteEndElement();

2 个答案:

答案 0 :(得分:3)

除了使用XmlTextWriter创建电子表格之外,使用专门用于创建Excel文件的库可能会更好。否则,您最终会遇到类似于您所看到的问题 - 像xmlns属性这样的小错误导致您的文件显示已损坏。专门为创建xls文件而编写的库已经解决了这个问题。

EPPlus似乎得到了很好的支持:http://epplus.codeplex.com/

答案 1 :(得分:0)

当您使用XmlTextWriter时,您会获得与.xls不同的格式。您创建的是,是的,Excel支持它,但每次您都会收到警告消息。
正如@matt已经提到的,使用特定的库以适当的excel格式创建文件要容易得多。我还建议你看看npoi图书馆。如果你使用旧的.xls格式,那就太好了。