NPOI SetCellValue 方法不会将数据写入单元格
NPOI SetCellValue method doesn't write data to cells
我在使用 NPOI
将数据写入 Excel 工作表单元格时遇到一些问题。
这是我的代码:
FileStream file = new FileStream(path, FileMode.Open, FileAccess.Read);
hssfworkbook = new HSSFWorkbook(file);
ISheet sheet1 = hssfworkbook.GetSheet("Табель");
for (int i = 0; i < table.Tables[0].Rows.Count; i++)
{
for (int j = 0; j < table.Tables[0].Columns.Count; j++)
{
if (table.Tables[0].Rows[i][j].ToString() != "0")
sheet1.GetRow(i+5).GetCell(j).SetCellValue(table.Tables[0].Rows[i][j].ToString());
else
sheet1.GetRow(i+5).GetCell(j).SetCellValue("");
}
}
string save_path = Server.MapPath("~/templates/report_new.xls");
FileStream save_file = new FileStream(save_path, FileMode.Create);
hssfworkbook.Write(save_file);
save_file.Close();
我知道打开现有工作表的过程有效,因为运行此代码后我有一个名为 "report_new" 的新保存工作表。它可以正确打开现有工作表,因为新保存的文件内部有相同的模板。但它没有我需要的数据。因此循环中的 SetCellValue 方法不起作用,并且不会将数据写入单元格。我检查了由名为 "table" 的数据集表示的数据源不为空,因此数据存在。但它不会将其写入单元格。
这可能是什么问题?
尝试使用其中一种方法写入 excel
的单元格
var row = sheet.CreateRow(0);
row.CreateCell(j).SetCellValue(table.Tables[0].Rows[i][j].ToString());
// or
row.Cells[j].SetCellValue(table.Tables[0].Rows[i][j].ToString());
// Or
ISheet sheet1 = hssfworkbook.GetSheet("Табель");
for (int i = 0; i < table.Tables[0].Rows.Count; i++)
{
HSSFRow row = (HSSFRow)sheet1.GetRow(i+5);
for (int j = 0; j < table.Tables[0].Columns.Count; j++)
{
if (table.Tables[0].Rows[i][j].ToString() != "0")
row.GetCell(j).SetCellValue(table.Tables[0].Rows[i][j].ToString());
else
row.GetCell(j).SetCellValue("");
}
}
您可以为 SetValue(sheet, col, row, value) 创建函数
这里是示例
SetCellValue(sheet, cellRowIndex, cellColumnIndex, value);
private static void SetCellValue(ISheet worksheet, int rowPosition, int columnPosition, String value)
{
IRow dataRow = worksheet.GetRow(rowPosition) ?? worksheet.CreateRow(rowPosition);
ICell cell = dataRow.GetCell(columnPosition) ?? dataRow.CreateCell(columnPosition);
cell.SetCellValue(value);
}
我在使用 NPOI
将数据写入 Excel 工作表单元格时遇到一些问题。
这是我的代码:
FileStream file = new FileStream(path, FileMode.Open, FileAccess.Read);
hssfworkbook = new HSSFWorkbook(file);
ISheet sheet1 = hssfworkbook.GetSheet("Табель");
for (int i = 0; i < table.Tables[0].Rows.Count; i++)
{
for (int j = 0; j < table.Tables[0].Columns.Count; j++)
{
if (table.Tables[0].Rows[i][j].ToString() != "0")
sheet1.GetRow(i+5).GetCell(j).SetCellValue(table.Tables[0].Rows[i][j].ToString());
else
sheet1.GetRow(i+5).GetCell(j).SetCellValue("");
}
}
string save_path = Server.MapPath("~/templates/report_new.xls");
FileStream save_file = new FileStream(save_path, FileMode.Create);
hssfworkbook.Write(save_file);
save_file.Close();
我知道打开现有工作表的过程有效,因为运行此代码后我有一个名为 "report_new" 的新保存工作表。它可以正确打开现有工作表,因为新保存的文件内部有相同的模板。但它没有我需要的数据。因此循环中的 SetCellValue 方法不起作用,并且不会将数据写入单元格。我检查了由名为 "table" 的数据集表示的数据源不为空,因此数据存在。但它不会将其写入单元格。 这可能是什么问题?
尝试使用其中一种方法写入 excel
的单元格 var row = sheet.CreateRow(0);
row.CreateCell(j).SetCellValue(table.Tables[0].Rows[i][j].ToString());
// or
row.Cells[j].SetCellValue(table.Tables[0].Rows[i][j].ToString());
// Or
ISheet sheet1 = hssfworkbook.GetSheet("Табель");
for (int i = 0; i < table.Tables[0].Rows.Count; i++)
{
HSSFRow row = (HSSFRow)sheet1.GetRow(i+5);
for (int j = 0; j < table.Tables[0].Columns.Count; j++)
{
if (table.Tables[0].Rows[i][j].ToString() != "0")
row.GetCell(j).SetCellValue(table.Tables[0].Rows[i][j].ToString());
else
row.GetCell(j).SetCellValue("");
}
}
您可以为 SetValue(sheet, col, row, value) 创建函数
这里是示例
SetCellValue(sheet, cellRowIndex, cellColumnIndex, value);
private static void SetCellValue(ISheet worksheet, int rowPosition, int columnPosition, String value)
{
IRow dataRow = worksheet.GetRow(rowPosition) ?? worksheet.CreateRow(rowPosition);
ICell cell = dataRow.GetCell(columnPosition) ?? dataRow.CreateCell(columnPosition);
cell.SetCellValue(value);
}