C# 将Gridview导出到Excel成功,但文件已损坏?

C# 将Gridview导出到Excel成功,但文件已损坏?,c#,excel,gridview,openxml,aspnet-development-server,C#,Excel,Gridview,Openxml,Aspnet Development Server,我需要以编程方式创建一个包含3个工作表的Excel电子表格 对于Sheet1,我正在尝试导出一个Gridview…及其所有格式…并在不使用Http.Response的情况下进行导出,因为这种技术会强制弹出一个文件“Save/Save As”请求程序框,这似乎会停止所有进一步的代码执行 如果我能够成功地将Gridview直接写入Excel工作簿,我应该能够继续我的编码例程,然后重新打开文件并以编程方式添加工作表2和3 这个代码很有效……有点……差不多 private void ExportGrid

我需要以编程方式创建一个包含3个工作表的Excel电子表格

对于Sheet1,我正在尝试导出一个Gridview…及其所有格式…并在不使用Http.Response的情况下进行导出,因为这种技术会强制弹出一个文件“Save/Save As”请求程序框,这似乎会停止所有进一步的代码执行

如果我能够成功地将Gridview直接写入Excel工作簿,我应该能够继续我的编码例程,然后重新打开文件并以编程方式添加工作表2和3

这个代码很有效……有点……差不多

private void ExportGridView(GridView myGrid)
{
    System.IO.StringWriter sw = new System.IO.StringWriter();
    System.Web.UI.HtmlTextWriter htw = new System.Web.UI.HtmlTextWriter(sw);

    // Render grid view control.
    myGrid.RenderControl(htw);

    // Write the rendered content to a file.
    string renderedGridView = sw.ToString();

    File.WriteAllText("C:\\TimeSheets\\ExportedFile.xlsx", renderedGridView);

}
如果我停止编码…并导航到时间表目录,我会看到“ExportedFile.xlsx”显示为“Microsoft Office Excel 2007工作簿”,并且我的Excel程序在打开和显示格式正确的Gridview时没有问题

但如果我继续用C#编码,并试图在代码隐藏中打开同一个文件,就会出现“文件包含损坏的数据”错误

如果在使用Excel查看“ExportedFile.xlsx”文件时执行“另存为”,则会看到文件名被置于引号中,并且文件类型已默认另存为网页htm/html。如果我通过删除文件名中的引号并将文件类型设置为“.xlsx”…来重置这些值,那么生成的文件可以在我的代码中读取,而无需抱怨

有人能给我一个解决办法吗


Joe.

我不确定您“试图在我的代码隐藏中打开同一个文件”的确切方式,但如果您试图将其作为实际的excel文件打开,这可能是您的问题

当您使用HtmlTextWriter将其保存为“excel文件”时,实际上是将其保存为excel可以读取的html文件。尝试将扩展名更改为.html并在浏览器中打开它,您就会明白我的意思。这就是excel默认为“另存为网页”的原因,因为它是以“另存为网页”的形式打开的


因此,如果加载代码将其视为excel文件,这就是为什么会出现问题的原因。您没有发布任何加载代码,因此很难确定。

不能只是将gridview转储到xlsx文件中,然后期望它工作。 需要使用OpenXml生成文件的自定义包装器或使用外部库,例如