复制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开始。
上一篇: Copying Excel worksheets with NPOI CopySheet; copy is always blank
下一篇: How do I format my export to excel workbook in microsoft.office.interop.excel?