我在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();
}
}
我应该怎么做以避免收到该警告信息?
答案 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而没有关闭工作簿我将邮件作为附件发送。后来我意识到必须关闭工作簿并作为附件发送。