我是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
}
答案 0 :(得分:1)
在您的代码中,您似乎没有将更改写回文件。如果您在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);