【问题标题】:Exporting excel error : File you are trying to open FileName is in different format than specified extension导出 excel 错误:您尝试打开的文件 FileName 的格式与指定的扩展名不同
【发布时间】:2014-04-22 06:02:14
【问题描述】:

我使用以下代码将数据从数据集导出到 excel 文件:

 public void ExportRecords(System.Data.DataTable dt, String fileName)
    {
        try
        {
            if (dt.Rows.Count > 0)
            {
                string path = AllinAudio_Temp;
                string timestamp = Convert.ToString(DateTime.Now);
                timestamp = timestamp.Replace(" ", "");
                timestamp = timestamp.Replace("/", "");
                timestamp = timestamp.Replace(":", "");
                fileName = fileName.Replace(" ", "");

                string filename = path + @"\" + timestamp + "_" + fileName + ".xls";
                CarlosAg.ExcelXmlWriter.Workbook book = new CarlosAg.ExcelXmlWriter.Workbook();

                //// Add a Worksheet with some data
                CarlosAg.ExcelXmlWriter.Worksheet sheet = book.Worksheets.Add("Sheet1");
                WorksheetStyle style = book.Styles.Add("HeaderStyle");
                style.Font.Bold = true;
                WorksheetStyle style1 = book.Styles.Add("HeaderStyle1");
                style1.Font.Bold = true;
                style1.Font.Color = "Red";

                WorksheetRow row;// = sheet.Table.Rows.Add();

                row = sheet.Table.Rows.Add();
                foreach (DataColumn column in dt.Columns)
                {
                    row.Cells.Add(new WorksheetCell(column.ColumnName, "HeaderStyle"));
                }




                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    row = sheet.Table.Rows.Add();

                    for (int l = 0; l < dt.Columns.Count; l++)
                    {
                        row.Cells.Add(dt.Rows[i][l].ToString());


                    }


                }

                book.Save(filename);
                Response.ContentType = "text/excel";
                Response.AppendHeader("Content-Disposition", "attachment; filename=" + timestamp + "_" + fileName + ".xls");
                Response.TransmitFile(filename);
                Response.End();


            }
        }
        catch (Exception)
        {

            throw;
        }
    }

当文件被导出并且我们尝试打开它时,它给了我消息:

我只想要 xls 格式的文件,并且我还以 xls 格式导出它。

但是为什么当我尝试打开它时会出现这种错误。

当我尝试使用 XLSX 时

【问题讨论】:

标签: c# asp.net .net excel visual-studio-2008


【解决方案1】:

最大的提示是您用于创建文件的组件的名称。 ExcelXmlWriter 似乎以 Excel XML 格式写入文件,其文件扩展名应为 XML。当您使用 XLS 扩展名时,Excel 期望内容为旧格式。当它无法将文件作为经典 Excel 文件打开时,它会尝试替代方法,发现 Excel XML 可以正常工作并警告您该问题。

解决方案:更改您的输出代码以使用文件扩展名XML 而不是XLS

(不是前面所说的 XLSX。)

【讨论】:

  • 先生,当我尝试使用 xlsx 时出现同样的问题,请查看我的编辑
  • 先生,它需要什么扩展?
  • 但是,我想把它看成excel文件
  • 然后您必须将 Excel 与 XML 文件关联,更改注册表以删除该消息,或者使用该消息。 XML 显然是这种格式的正确扩展名。
【解决方案2】:

试试这个功能

 public static void ExportToExcelOnece(DataSet dsExcel, string ExcelFilePath)
    {

        if (dsExcel == null || dsExcel.Tables.Count == 0)
            throw new Exception("ExportToExcel: Null or empty input table!\n");

        Excel.Application excelApp = new Excel.Application();
        excelApp.Workbooks.Add();
        Excel.Worksheet newWorksheet;
        Excel.Worksheet objSheet = (Excel.Worksheet)excelApp.ActiveWorkbook.Sheets["Sheet1"];

        for (int m = 0; m <= dsExcel.Tables.Count - 1; m++)
        {
            newWorksheet = (Excel.Worksheet)excelApp.Worksheets.Add(objSheet, Missing.Value, Missing.Value, Missing.Value);
            newWorksheet.Name = dsExcel.Tables[m].TableName;

            // column headings
            for (int i = 0; i < dsExcel.Tables[m].Columns.Count; i++)
            {
                newWorksheet.Cells[1, (i + 1)] = dsExcel.Tables[m].Columns[i].ColumnName;
            }

            // rows
            for (int i = 0; i < dsExcel.Tables[m].Rows.Count; i++)
            {
                for (int j = 0; j < dsExcel.Tables[m].Columns.Count; j++)
                {
                    newWorksheet.Cells[(i + 2), (j + 1)] = dsExcel.Tables[m].Rows[i][j];
                }
            }
        }

        ((Excel.Worksheet)excelApp.ActiveWorkbook.Sheets[1]).Activate();

        objSheet.Delete();
        objSheet = (Excel.Worksheet)excelApp.ActiveWorkbook.Sheets["Sheet2"];
        objSheet.Delete();
        objSheet = (Excel.Worksheet)excelApp.ActiveWorkbook.Sheets["Sheet3"];
        objSheet.Delete();

        // check fielpath
        if (ExcelFilePath != null && ExcelFilePath != "")
        {
            try
            {
                excelApp.ActiveWorkbook.SaveAs(ExcelFilePath);
                excelApp.Quit();
                MessageBox.Show("Excel file saved!");
            }
            catch (Exception ex)
            {
                throw new Exception("ExportToExcel: Excel file could not be saved! Check filepath.\n"
                    + ex.Message);
            }
        }
        else    // no filepath is given
        {
            excelApp.Visible = true;
        }


        //Quit the Application.
        excelApp.Quit();

    }

【讨论】:

  • 虽然这确实会创建一个XLSXLSX 文件,但只有在系统上安装了Excel 时才会这样做。各种 XL 文件编写器的优点是它们不需要您安装 Excel。
猜你喜欢
  • 1970-01-01
  • 2021-11-09
  • 1970-01-01
  • 1970-01-01
  • 2012-12-25
  • 2010-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多