【发布时间】:2021-07-23 09:05:34
【问题描述】:
我正在尝试将数据从 DataGridView 导出到 Excel 文件,DataGridView 包含带有日期的单元格,并且 Int 一直在工作,直到我添加了另外 2 列(1 列带有文本,1 列带有日期)。
现在我得到错误:
System.Runtime.InteropServices.COMException: '无效索引。 (来自 HRESULT 的异常:0x8002000B (DISP_E_BADINDEX))'
这是我的代码:
Microsoft.Office.Interop.Excel._Application app = new
Microsoft.Office.Interop.Excel.Application();
Microsoft.Office.Interop.Excel._Workbook workbook = app.Workbooks.Add(Type.Missing);
Microsoft.Office.Interop.Excel._Worksheet worksheet = null;
worksheet = workbook.Sheets["Sheet1"];
worksheet = workbook.ActiveSheet;
worksheet.Name = "Raport";
for (int i = 1; i < tabinregrap.Columns.Count + 1; i++)
{
worksheet.Cells[1, i] = tabinregrap.Columns[i - 1].HeaderText;
}
for (int i = 0; i < tabinregrap.Rows.Count; i++)
{
for (int j = 0; j < tabinregrap.Columns.Count; j++)
{
worksheet.Cells[i + 2, j + 1] = tabinregrap.Rows[i].Cells[j].Value.ToString();
}
}
var saveFileDialoge = new SaveFileDialog();
saveFileDialoge.FileName = "output";
saveFileDialoge.DefaultExt = ".xlsx";
if (saveFileDialoge.ShowDialog() == DialogResult.OK)
{
workbook.SaveAs(saveFileDialoge.FileName, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlExclusive, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
}
app.Quit();
【问题讨论】:
-
使用发布的代码,我无法重现您描述的错误。您确定错误来自发布的代码吗?如果是这样……哪一行会引发该错误?
-
你好不是来自应用程序进入中断模式的行,会出现错误,当按下继续应用程序关闭时
-
正如我之前评论的那样,发布的代码按预期工作,没有错误。你说你最近添加了一些列……把它们拿出来看看错误是否消失。我只是说错误似乎不是来自发布的代码。据我所知,向网格添加更多列不会有任何区别。我这样做了,它仍然按预期工作,没有错误。
-
如果愿意使用名为 SpreadSheetLight 的免费第三方 Excel 库,我可以发布一个解决方案,该解决方案从 DataGridView 导出到 Excel 并格式化日期单元格,并且能够写入新工作表或附加到现有工作表。
-
关于“安装新版本”,这是一个可能再次发生的问题,通常不会发生在使用 Open XML 的库中,例如 EPPlus 和 SpreadSheetLight
标签: c#