使用 NPOI 将数据从一个 Sheet 复制到另一个
Copying Data from one Sheet to Another using NPOI
我是 C# 和 Excel 的新手,我正在尝试将数据从一个 sheet(充满数据)复制到一个空的新数据。我正在使用 NPOI,我已经弄明白了一些事情,但是我在添加数据时遇到了问题。
第二个sheet是空的,所以所有单元格都是空的(如果我错了请纠正我)。当我尝试将数据从第一个 sheet 复制到第二个时,没有任何反应:单元格未填充。
using (FileStream fs = new FileStream(@"C:\Users\MyDoc.xlsx", FileMode.Open, FileAccess.ReadWrite))
{
XSSFWorkbook templateWorkbook = new XSSFWorkbook(fs);
//Load the sheets needed
var sheettoget = templateWorkbook.GetSheet("Sheet1");
var sheettoadd = templateWorkbook.GetSheet("Sheet2");
XSSFRow row = (XSSFRow)sheettoadd.CreateRow(0);
var cell = row.CreateCell(0);
var data = sheettoget.GetRow(0).GetCell(4).StringCellValue.ToString();
cell.SetCellValue(data); //the cell is not populated
}
在您的代码中,您似乎从未将更改写回文件。如果您在 Excel 中打开文件并且看不到更改,这可以解释原因。我想你想做这样的事情:
// Read the file into a workbook
XSSFWorkbook templateWorkbook;
using (FileStream fs = new FileStream(@"C:\Temp\MyDoc.xlsx", FileMode.Open, FileAccess.Read))
{
templateWorkbook = new XSSFWorkbook(fs);
}
// Load the sheets needed (if the new sheet doesn't already exist, create it)
var sheettoget = templateWorkbook.GetSheet("Sheet1");
var sheettoadd = templateWorkbook.GetSheet("Sheet2");
if (sheettoadd == null)
{
sheettoadd = templateWorkbook.CreateSheet("Sheet2");
}
// Make changes
XSSFRow row = (XSSFRow)sheettoadd.CreateRow(0);
var cell = row.CreateCell(0);
var data = sheettoget.GetRow(0).GetCell(4).StringCellValue.ToString();
cell.SetCellValue(data);
// Write the changes back to the file
using (FileStream fs = new FileStream(@"C:\Temp\MyDoc.xlsx", FileMode.Create, FileAccess.Write))
{
templateWorkbook.Write(fs);
}
如果您要复制整个 sheet,则不需要一个单元一个单元地复制。 NPOI 有一个 CopySheet
方法供您使用:
sheettoget.CopySheet("Sheet2", true);
我是 C# 和 Excel 的新手,我正在尝试将数据从一个 sheet(充满数据)复制到一个空的新数据。我正在使用 NPOI,我已经弄明白了一些事情,但是我在添加数据时遇到了问题。
第二个sheet是空的,所以所有单元格都是空的(如果我错了请纠正我)。当我尝试将数据从第一个 sheet 复制到第二个时,没有任何反应:单元格未填充。
using (FileStream fs = new FileStream(@"C:\Users\MyDoc.xlsx", FileMode.Open, FileAccess.ReadWrite))
{
XSSFWorkbook templateWorkbook = new XSSFWorkbook(fs);
//Load the sheets needed
var sheettoget = templateWorkbook.GetSheet("Sheet1");
var sheettoadd = templateWorkbook.GetSheet("Sheet2");
XSSFRow row = (XSSFRow)sheettoadd.CreateRow(0);
var cell = row.CreateCell(0);
var data = sheettoget.GetRow(0).GetCell(4).StringCellValue.ToString();
cell.SetCellValue(data); //the cell is not populated
}
在您的代码中,您似乎从未将更改写回文件。如果您在 Excel 中打开文件并且看不到更改,这可以解释原因。我想你想做这样的事情:
// Read the file into a workbook
XSSFWorkbook templateWorkbook;
using (FileStream fs = new FileStream(@"C:\Temp\MyDoc.xlsx", FileMode.Open, FileAccess.Read))
{
templateWorkbook = new XSSFWorkbook(fs);
}
// Load the sheets needed (if the new sheet doesn't already exist, create it)
var sheettoget = templateWorkbook.GetSheet("Sheet1");
var sheettoadd = templateWorkbook.GetSheet("Sheet2");
if (sheettoadd == null)
{
sheettoadd = templateWorkbook.CreateSheet("Sheet2");
}
// Make changes
XSSFRow row = (XSSFRow)sheettoadd.CreateRow(0);
var cell = row.CreateCell(0);
var data = sheettoget.GetRow(0).GetCell(4).StringCellValue.ToString();
cell.SetCellValue(data);
// Write the changes back to the file
using (FileStream fs = new FileStream(@"C:\Temp\MyDoc.xlsx", FileMode.Create, FileAccess.Write))
{
templateWorkbook.Write(fs);
}
如果您要复制整个 sheet,则不需要一个单元一个单元地复制。 NPOI 有一个 CopySheet
方法供您使用:
sheettoget.CopySheet("Sheet2", true);