复制Excel工作表与NPOI CopySheet; 副本总是空白

我正在尝试创建一个应用程序,该程序可将给定目录中的Excel电子表格合并到单个标签化的Excel工作簿中。 我只能访问VS社区2015,所以VSTO是不可能的。 我正在使用Interop和NPOI 2.1.3.1。

这是我的代码:

files = Directory.GetFiles(sourcePath);
XSSFWorkbook test = new XSSFWorkbook();

try
{
    string fPath = files[0];
    FileStream fs2 = new FileStream(fPath, FileMode.Open, FileAccess.ReadWrite);
    XSSFWorkbook myBook = new XSSFWorkbook(fs2);
    test.CreateSheet(myBook.GetSheetName(0));
    var sheet1 = myBook.GetSheetAt(0).CopySheet(test.GetSheetName(0));

    test.Write(new FileStream("testFile.xlsx", FileMode.Create, FileAccess.ReadWrite));
}
catch {  }

我并没有试图做任何奇怪的事情,在这里,只需获取由GetFiles函数返回的第一个文件,将所有内容复制到第一个工作表上,然后在新工作簿中创建一个新工作表“测试”,并复制所复制的内容。 我知道正在找到源文件,因为输出文件“testFile.xlsx”的sheet1正在获取源工作表的唯一工作表名称 - 它不是“Sheet1”。 但是,该表的其余部分空白,我不知道为什么。

我对Excel 2016使用这个功能,如果这样做有所帮助的话。


请尝试两种不同的解决方案:一个用于Interop(xlsx文件格式),另一个用于NPOI(xls文件格式)。 这些解决方案可以获取文件夹中的excel文件,读取excel文件并将表格复制到新的excel文件中。

使用Interop.Excel:

// using Microsoft.Office.Interop.Excel;

Application app = new Application();
app.Visible = false;
app.DisplayAlerts = false;

string[] files = Directory.GetFiles(@"c:tempexcel");

foreach (string file in files)
{
    app.Workbooks.Add(file);
}

for (int i = 2; i <= app.Workbooks.Count; i++)
{
    for (int j = 1; j <= app.Workbooks[i].Worksheets.Count; j++)
    {
        Worksheet ws = app.Workbooks[i].Worksheets[j];
        ws.Copy(app.Workbooks[1].Worksheets[1]);
    }
}

app.Workbooks[1].SaveCopyAs(@"c:tempexceloutputtestFile.xlsx");
app.Quit();

使用NPOI:

// using NPOI.HSSF.UserModel;

string[] files = Directory.GetFiles(@"c:tempexcel");
HSSFWorkbook workbookMerged = new HSSFWorkbook();

foreach (string file in files)
{
    HSSFWorkbook workbook;

    using (FileStream fs = new FileStream(file, FileMode.Open, FileAccess.Read))
    {
        workbook = new HSSFWorkbook(fs);

        for (int i = 0; i < workbook.NumberOfSheets; i++)
        {
            ((HSSFSheet)workbook.GetSheetAt(i)).CopyTo(workbookMerged, workbook.GetSheetName(i), true, true);
        }
    }
}

using (FileStream fs = new FileStream(@"c:tempexceloutputtestFile.xls", FileMode.Append, FileAccess.Write))
{
    workbookMerged.Write(fs);
}

请注意,对于NPOI解决方案,我将xlsx文件转换为xls以使用HSSF而不是XSSF,因为没有可用于XSSFSheet CopyTo方法。 此方法仅适用于HSSFSheet ,从最新的NPOI版本2.3.0开始。

链接地址: http://www.djcxy.com/p/6075.html

上一篇: Copying Excel worksheets with NPOI CopySheet; copy is always blank

下一篇: How do I format my export to excel workbook in microsoft.office.interop.excel?