在服务器端生成excel文件后无法打开它

时间:2014-08-19 09:17:30

标签: c# asp.net

我使用C#编码生成了excel文件,如下所示

C#编码:

protected void Page_Load(object sender, EventArgs e)
        {
            var doc = new SpreadsheetDocument(@"D:\JOSEPH\GenerateExcelSheet\OpenXmlPackaging.xlsx");
            Worksheet sheet1 = doc.Worksheets.Add("My Sheet");
            sheet1.Cells[1, 1].Value = "Test";

            sheet1.Cells["A1"].Value = 1;
            sheet1.Cells["C3"].Style = new OpenXmlPackaging.Style {

                Borders = new Borders(BorderStyles.Thick),
                Font = new Font
                {
                    Name = "Consolas",
                    Size = 10,
                    Style = FontStyles.DoubleUnderline | FontStyles.Bold
                },
                NumberFormat = new NumberFormat("#,##0.0;[Red](#,##0.0)"),
                Alignment = new Alignment
                {
                    HorizontalAlignment = HorizontalAlignment.Right,
                    VerticalAlignment = VerticalAlignment.Top,
                    WrapText = true,
                    Rotation = 45
                },
            };
            sheet1.Cells.CreateRange("B10:D5").MergeCells();
            sheet1.AutoFitColumns();
            sheet1.SetColumnWidth(3, 12);


        }

但是当我尝试打开excel文件时,会出现一个消息框“enter image description here

2 个答案:

答案 0 :(得分:2)

简短的回答是,您不应该尝试在服务器上创建这样的Excel文件。使用Excel API执行此操作存在技术问题和许可问题 - 您可以在此处阅读更多内容http://support.microsoft.com/default.aspx/kb/257757

技术问题可以很好地解释为什么你的档案已经腐败。

更好的方法是使用不依赖Excel API的库,我在这里的问题/答案Reading Excel Files as a Server Process中列出了一些可能对您有所帮助。

答案 1 :(得分:0)

用于打开Excel:

     ApplicationClass excel = new ApplicationClass();
            Worksheet sheet1  = Activate(excel);
//insert you'r code

使用它来保存并关闭Excel:

 excel.Visible = true;
object misValue = System.Reflection.Missing.Value;

    sheet1.SaveAs(filename, XlFileFormat.xlWorkbookDefault, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue);
                    excel.Application.Quit();
                    excel.Quit();

                    Marshal.ReleaseComObject(ws);
                    Marshal.ReleaseComObject(excel);
                    excel = null;