首页 文章

导出Gridview到Excel成功但文件已损坏?

提问于
浏览
0

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

对于Sheet1,我正在尝试导出一个Gridview ...及其所有格式...而不使用Http.Response这样做,因为该技术强制文件'保存/另存为'请求框弹出,这似乎停止所有进一步的代码执行 .

如果我能够成功直接将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);

}

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

但是,如果我继续在C#中编码并尝试在我的代码隐藏中打开同一个文件,我会收到一个“文件包含损坏的数据”错误 .

如果,在使用Excel查看“ExportedFile.xlsx”文件时,我执行“另存为”,我看到文件名放在引号中,文件类型默认为另存为网页htm / html . 如果我通过从文件名中删除引号并将文件类型设置为“.xlsx”来重置这些值...那么,这个结果文件可以在我的代码隐藏中读取而不会紧张 .

谁能为我提供解决方案?

乔 .

2 回答

  • 0

    我不确定你是如何“尝试在我的代码隐藏中打开同一个文件”,但是如果你试图将它打开为可能是你的问题的实际excel文件 .

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

    因此,如果您的加载代码将其视为excel文件,那就是您遇到问题的原因 . 您没有发布任何加载代码,因此很难确定 .

  • 0

    不能只将gridview转储到xlsx文件中并期望它能够正常工作 . 需要使用OpenXml生成文件或使用外部lib的自定义包装器,例如http://epplus.codeplex.com/

相关问题