如何修复文件格式和扩展名不匹配?

时间:2015-02-09 05:58:06

标签: c# excel

我在c#中创建了一个代码,用于创建和保存excel文件。代码可以成功创建和保存excel文件,但是当我打开创建的excel文件时,它会显示一条警告消息,告诉"' filename.xls'的文件格式和扩展名。不匹配。该文件可能已损坏或不安全。除非你相信它的来源,否则不要打开它。你想打开它吗?"。我使用以下代码:

private void button1_Click(object sender, EventArgs e)
    {
        saveFileDialogSummary.Filter = "Excel Flie|*.xls";
        saveFileDialogSummary.FilterIndex = 0;
        saveFileDialogSummary.RestoreDirectory = true;
        saveFileDialogSummary.CreatePrompt = true;
        saveFileDialogSummary.Title = "Export Excel File To";

        Excel.Application ExcelApp = new Excel.Application();
        ExcelApp.Application.Workbooks.Add(Type.Missing);
        ExcelApp.Columns.ColumnWidth = 30;
        for (int i = 0; i < dataGridViewSummary.Rows.Count; i++)
        {
            DataGridViewRow row = dataGridViewSummary.Rows[i];
            for (int j = 0; j < row.Cells.Count; j++)
            {
                ExcelApp.Cells[i + 1, j + 1] = row.Cells[j].ToString();
            }
        }

        DialogResult res = saveFileDialogSummary.ShowDialog();
        if(res == DialogResult.OK){
            ExcelApp.ActiveWorkbook.SaveCopyAs(saveFileDialogSummary.FileName);
            ExcelApp.ActiveWorkbook.Saved = true;
            ExcelApp.Quit();
        }
    }

我应该怎么做以避免收到该警告信息?

4 个答案:

答案 0 :(得分:6)

如果您安装了最新的办公室,只需将.xls更改为.xlsx。

答案 1 :(得分:5)

我知道现在可以解决此问题,但只是尝试在不修改代码的情况下帮助您仍然可以使用.xls格式,并在通过设置注册表打开文件时禁止显示此警告。 打开注册编辑,导航到HKEY_CURRENT_USER\Software\Microsoft\Office\14\Excel\Security

创建名为DWord的{​​{1}}并将值设置为0.

这可能会使您的系统容易受到攻击,但在组织网络中工作并不是什么大问题,至少当您确定要下载文档和来源类型时。

答案 2 :(得分:1)

文件扩展名.xls和.xlsx文件包含不同的布局。扩展名.xls在2003版本中使用,然后使用版本.xlsx扩展名 您必须将excel文件导出为.xlsx格式。它将支持我使用的所有版本。

将以下DLLS添加到bin文件夹
1. ClosedXML.dll
2. DocumentFormat.OpenXml.dll

导出到.xlsx的代码

    DataTable dt = new DataTable(); 
    //Create column and inser rows
    using (XLWorkbook wb = new XLWorkbook())
    {         
                var ws = wb.Worksheets.Add(dt, Sheetname);
                HttpContext.Current.Response.Clear();
                HttpContext.Current.Response.Buffer = true;
                HttpContext.Current.Response.Charset = "";
                HttpContext.Current.Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
                HttpContext.Current.Response.AddHeader("content-disposition", "attachment;filename=" + p_FileName + ".xlsx");
                using (MemoryStream MyMemoryStream = new MemoryStream())
                {
                    wb.SaveAs(MyMemoryStream);
                    MyMemoryStream.WriteTo(HttpContext.Current.Response.OutputStream);
                    HttpContext.Current.Response.Flush();
                    HttpContext.Current.Response.End();
                }
     }

答案 3 :(得分:0)

“文件格式和扩展名不匹配”的解决方案是在对文件完成所有必要的写入后,最后关闭工作簿**($ workbook-&gt; close;)**。

我在从邮件打开“XLS”文件时遇到了同样的问题。我创建了一个文件并插入了所有我的东西init而没有关闭工作簿我将邮件作为附件发送。后来我意识到必须关闭工作簿并作为附件发送。