使用NPOI将数据从一个表复制到另一个表

本文关键字:一个 复制 另一个 NPOI 数据 使用 | 更新日期: 2023-09-27 18:11:48

我是c#和Excel的新手,我正试图将数据从一个表(充满数据)复制到一个空的新表。我正在使用NPOI,我已经弄清楚了一些事情,但是在添加数据时我有问题。

第二个工作表是空的,所以所有的单元格都是空的(请纠正我,如果我错了)。当我尝试将数据从第一个工作表复制到第二个工作表时,什么也没有发生:单元格没有填充。

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
}

使用NPOI将数据从一个表复制到另一个表

在您的代码中,看起来您从未将更改写回文件。如果你在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);
}

如果要复制整个工作表,则不需要逐个单元格复制。NPOI有一个CopySheet方法,你可以用它来做:

sheettoget.CopySheet("Sheet2", true);