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

我是新来的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 } 

在你的代码中,看起来你并没有把修改写回到文件中。 如果您在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);