Невозможно прочитать файл при экспорте в Excel в C#

Я использую C# экспорт данных, чтобы преуспеть. Это работает хорошо на первых порах. Экспорт запускается с помощью события кнопки, если пользователь запрашивает несколько экспортов с одной и той же страницы подряд, и я начинаю получать сообщение об ошибке "Невозможно прочитать файл". Если я выберу "SAVE" файл вместо открытого, то он пишет файл просто отлично. Он просто не откроет файл в браузере.

Я совершенно уверен, что ошибка исходит от Excel, так как Excel открывается, но не загружает мой файл.

Я читал об Response.End и Response.Close... Некоторые говорят, что никогда не используют их, некоторые говорят, что используют их. Я перепробовал каждую комбинацию End и Close.

Мне кажется, что что-то кешируется в памяти, потому что из-за того, что я закрываю свой браузер (или долго жду), похоже, проблема проясняется.

Кто-нибудь имеет представление о том, что может быть не так, или, по крайней мере, как я могу сказать, почему Excel не может прочитать мой файл, когда я могу записать его и открыть его с моего жесткого диска без проблем?

     protected void btnSaveToXls_Click(object sender, EventArgs e)
{

    Response.ClearHeaders();
    Response.Cache.SetCacheability(HttpCacheability.Private);
    Response.Buffer = true;
    Response.AddHeader("content-transfer-encoding", "binary");
    Response.Clear();           
    Response.AddHeader("Content-Disposition", "attachment; filename=myFileName.xls");
    Response.AddHeader("pragma", "private");
    Response.ContentType = "application/vnd.ms-excel";

    using (StringWriter sw = new StringWriter())
    {
        // The main purpose of these next two writes are to name the worksheet and add the gridlines to the excel sheet
        sw.Write(@"<html xmlns:x=""urn:schemas-microsoft-com:office:excel"">");
        sw.Write(@"<head>
                <xml>
                <x:ExcelWorkbook> 
                    <x:ExcelWorksheets>
                        <x:ExcelWorksheet>
                            <x:Name>Clients Contacted</x:Name>
                            <x:WorksheetOptions>
                                <x:Panes></x:Panes>
                                <x:Print><x:Gridlines /></x:Print>
                            </x:WorksheetOptions>
                        </x:ExcelWorksheet>
                    </x:ExcelWorksheets>
                </x:ExcelWorkbook>
                </xml>
            </head>");

        using (HtmlTextWriter htw = new HtmlTextWriter(sw))
        {
            Label newLine = new Label();
            newLine.Text = "<br/>";
            GridView gv = new GridView();
            gv.GridLines = GridLines.Both;
            gv.HeaderStyle.Font.Bold = true;

            //. . .
            // a bunch of code here to populate my gridview
            //. . .

            Panel p = new Panel();
            p.Controls.Add(lblTitle);
            p.Controls.Add(new Label { Text = "<BR/>" });
            p.Controls.Add(lblReportTitle);
            p.Controls.Add(new Label { Text = "<BR/>" });
            p.Controls.Add(new Label { Text = string.Format("Run Date {0}", DateTime.Now.ToString("MM/dd/yyyy")) });
            p.Controls.Add(new Label { Text = "<BR/>" });
            p.Controls.Add(new Label { Text = "<BR/>" });
            p.Controls.Add(gv);

            p.RenderControl(htw);
            try
            {
                //  Response.Clear();
                sw.Write("</html>");
                Response.Buffer = true;
                Response.Output.Write(sw.ToString());
                // Response.Output.Flush();
                Response.Flush();
                // Response.End();
            }
            catch (Exception ex)
            {
               //... Logging the error ...
            }
            finally
            {
                Response.Close();
            }
        }
    }
}

1 ответ

Вот что я узнал. Кажется, проблема заключается в том, что во второй раз вам нужно подождать, пока диалоговое окно из IE (которое предлагает вам "Открыть", "Сохранить" или "отменить"), чтобы изменить цвет фона. В моем случае это изменилось с белого фона на желтый. Я предполагаю, что документ не был полностью загружен клиенту, прежде чем Excel попытался его открыть. Chrome дал мне ошибку, если я пошел слишком быстро, но все равно открыл его, и файл выглядел нормально.

Другие вопросы по тегам