从dataGridView保存更改后,当通过excel打开xlsx文件时,会发生以下错误:
我们发现Book1.xlsx'中的某些内容存在问题。你想让我们尽可能多地恢复吗?如果您信任此工作簿的来源,请单击“是”。
for (int i = 0; i < dataGridView1.RowCount - 1; i++)
{
if (sh.GetRow(i) == null)
sh.CreateRow(i);
for (int j = 0; j < dataGridView1.ColumnCount; j++)
{
if (sh.GetRow(i).GetCell(j) == null)
sh.GetRow(i).CreateCell(j);
if (dataGridView1[j, i].Value != null)
{
sh.GetRow(i).GetCell(j).SetCellValue(dataGridView1[j, i].Value.ToString());
}
using (var fs = new FileStream("Book1.xlsx", FileMode.Open, FileAccess.ReadWrite))
{
wb.Write(fs);
}
}
}
答案 0 :(得分:0)
首先,您要多次编写工作簿,每个单元格一次。在完成更改后,您最后应该只编写一次工作簿。
此外,您的问题不清楚如何创建工作簿或工作表。我在下面添加了一些代码,以明确它应该如何。
试试这样:
XSSFWorkbook wb = new XSSFWorkbook();
ISheet sheet = wb.GetSheet("Sheet1") ?? wb.CreateSheet("Sheet1");
for (int i = 0; i < dataGridView1.RowCount; i++)
{
IRow row = sheet.GetRow(i) ?? sh.CreateRow(i);
for (int j = 0; j < dataGridView1.ColumnCount; j++)
{
ICell cell = row.GetCell(j) ?? row.CreateCell(j);
if (dataGridView1[j, i].Value != null)
{
cell.SetCellValue(dataGridView1[j, i].Value.ToString());
}
}
}
using (var fs = new FileStream("Book1.xlsx", FileMode.Create, FileAccess.Write))
{
wb.Write(fs);
}