C# 使用 excel 文件
C# Working with excel file
从 dataGridView 保存更改后,通过 excel 打开 xlsx 文件时出现此错误:
We found a problem with some content in 'Book1.xlsx' Do you want us to recover as much as we can? If you trust the source of this workbook, click Yes.
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);
}
}
}
一方面,您要多次编写工作簿,每个单元格一次。你真的应该只写一次工作簿,最后,当你完成更改时。
此外,从您的问题中不清楚您是如何创建工作簿或 sheet。我在下面添加了一些代码,以明确它的外观。
这样试试:
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);
}
从 dataGridView 保存更改后,通过 excel 打开 xlsx 文件时出现此错误:
We found a problem with some content in 'Book1.xlsx' Do you want us to recover as much as we can? If you trust the source of this workbook, click Yes.
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);
}
}
}
一方面,您要多次编写工作簿,每个单元格一次。你真的应该只写一次工作簿,最后,当你完成更改时。
此外,从您的问题中不清楚您是如何创建工作簿或 sheet。我在下面添加了一些代码,以明确它的外观。
这样试试:
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);
}