使用NPOI将excel工作表附加到其他工作表

使用NPOI将excel工作表附加到其他工作表,excel,apache-poi,npoi,Excel,Apache Poi,Npoi,我试图将同一工作簿中多个工作表中的数据附加到第一个工作表中 以下是我能够完成的工作: void SomeMethod() { HSSFWorkbook hssfwb; using (FileStream file = new FileStream(filePath, FileMode.Open, FileAccess.Read)) { hssfwb = new HSSFWorkbook(file); } var BaseSheet = wo

我试图将同一工作簿中多个工作表中的数据附加到第一个工作表中

以下是我能够完成的工作:

void SomeMethod()
{
    HSSFWorkbook hssfwb;
    using (FileStream file = new FileStream(filePath, FileMode.Open, FileAccess.Read))
    {
       hssfwb = new HSSFWorkbook(file);
    } 
    var BaseSheet = workbook.GetSheetAt(0);
    for (int i = 1; i < workbook.NumberOfSheets; i++)
    {
       AddRowsToBaseSheet(BaseSheet, workbook.GetSheetAt(i), workbook);
    }
}

  private void AddRowsToBaseSheet(ISheet BaseSheet, ISheet sheet, HSSFWorkbook workbook)
    {
        var temp = sheet.GetRowEnumerator();
        while (temp.MoveNext())
        {
            HSSFRow sourceRow = (HSSFRow)temp.Current;
            HSSFRow destinationRow = (HSSFRow)BaseSheet.CreateRow(BaseSheet.LastRowNum + 1);
            CopyRow(workbook, sourceRow, destinationRow);
        }
    }

private void CopyRow(HSSFWorkbook workbook, IRow sourceRow, IRow destinationRow)
    {

        // Loop through source columns to add to new row
        for (int i = 0; i < sourceRow.LastCellNum; i++)
        {
            // Grab a copy of the old/new cell
            ICell oldCell = sourceRow.GetCell(i);
            ICell newCell = destinationRow.CreateCell(i);

            // If the old cell is null jump to next cell
            if (oldCell == null)
            {
                newCell = null;
                continue;
            }



            // Set the cell data type
            newCell.SetCellType(oldCell.CellType);

            // Set the cell data value
            switch (oldCell.CellType)
            {
                case CellType.Blank:
                    newCell.SetCellValue(oldCell.StringCellValue);
                    break;
                case CellType.Boolean:
                    newCell.SetCellValue(oldCell.BooleanCellValue);
                    break;
                case CellType.Error:
                    newCell.SetCellErrorValue(oldCell.ErrorCellValue);
                    break;
                case CellType.Formula:
                    newCell.SetCellFormula(oldCell.CellFormula);
                    break;
                case CellType.Numeric:
                    newCell.SetCellValue(oldCell.NumericCellValue);
                    break;
                case CellType.String:
                    newCell.SetCellValue(oldCell.RichStringCellValue);
                    break;
                case CellType.Unknown:
                    newCell.SetCellValue(oldCell.StringCellValue);
                    break;
            }
        }



    }
我可能犯了一个愚蠢的错误,或者有没有其他图书馆也犯了同样的错误


在这种情况下,转换为数据集将不起作用,因为列不相关

您在哪里写入输出文件?输出文件是相同的,但在第一张表中,所有的表都没有附加在第一张表中,这就是我的目标,以扩展@DariusX的内容。在他的评论中提到,您需要通过写入输出文件来保存更改。目前,您只是在内存中添加新行。当程序完成时,这些更改将被丢弃,因为您尚未将它们写入文件。工作非常完美:我认为它是指excel,但它实际上创建了它的内存表示形式