我想将两个不同的工作表从另一个工作簿聚合到一个工作簿,但我不知道如何使用openXML。我只想创建一个包含两个工作表的工作簿。我不需要合并工作表。如何使用openXML将两个工作表聚合到一个工作簿?
答案 0 :(得分:3)
使用Epplus可以轻松地将工作表从一个工作簿复制到另一个工作簿,这在Nuget中是免费的。
像这个例子的东西会复制一个工作表&从一个工作簿到另一个工作簿的所有数据,无需任何单独的函数循环遍历行以复制数据:
FileInfo fInfoSrc = new FileInfo(@"C:\Temp\Source.xlsx");
FileInfo fInfoDest = new FileInfo(@"C:\Temp\Destination.xlsx");
using (var source = new ExcelPackage(fInfoSrc))
{
using (var destination = new ExcelPackage(fInfoDest))
{
var srcWorksheet = source.Workbook.Worksheets["SourceWorksheet"];
var destWorksheet = destination.Workbook.Worksheets.Add("destinationWorksheetName", srcWorksheet);
destination.Save();
}
}
答案 1 :(得分:0)
您需要对OpenXml SDK的引用。
如何创建工作簿的一个小例子。
将第二种方法AddWorksheet
称为所需的工作表。
private static SpreadsheetDocument CreateWorkbook(Stream stream)
{
// Create the Excel workbook
var spreadSheet = SpreadsheetDocument.Create(stream, SpreadsheetDocumentType.Workbook, false);
// Create the parts and the corresponding objects
// Workbook
spreadSheet.AddWorkbookPart();
spreadSheet.WorkbookPart.Workbook = new Workbook();
spreadSheet.WorkbookPart.Workbook.Save();
// Shared string table
var sharedStringTablePart = spreadSheet.WorkbookPart.AddNewPart<SharedStringTablePart>();
sharedStringTablePart.SharedStringTable = new SharedStringTable();
sharedStringTablePart.SharedStringTable.Save();
// Sheets collection
spreadSheet.WorkbookPart.Workbook.Sheets = new Sheets();
spreadSheet.WorkbookPart.Workbook.Save();
// Stylesheet
var workbookStylesPart = spreadSheet.WorkbookPart.AddNewPart<WorkbookStylesPart>();
workbookStylesPart.Stylesheet = new Stylesheet();
workbookStylesPart.Stylesheet.Save();
return spreadSheet;
}
private static WorksheetPart AddWorksheet(SpreadsheetDocument spreadsheet, string name)
{
// Add the worksheetpart
var worksheetPart = spreadsheet.WorkbookPart.AddNewPart<WorksheetPart>();
worksheetPart.Worksheet = new Worksheet(new SheetData());
uint sheetId = 1;
var sheets = spreadsheet.WorkbookPart.Workbook.GetFirstChild<Sheets>();
if (sheets.Elements<Sheet>().Any())
{
sheetId = sheets.Elements<Sheet>().Select(s => s.SheetId.Value).Max() + 1;
}
// Add the sheet and make relation to workbook
var sheet = new Sheet
{
Id = spreadsheet.WorkbookPart.GetIdOfPart(worksheetPart),
SheetId = sheetId,
Name = name
};
sheets.Append(sheet);
worksheetPart.Worksheet.Save();
spreadsheet.WorkbookPart.Workbook.Save();
return worksheetPart;
}
答案 2 :(得分:0)
我选择的最好方法是打开目标文件并循环打开迭代源文件,并复制工作表。接下来,我使用深度模式的克隆节点方法从源到目标文件克隆每一行。这个克隆的行我在目标文件工作表中的特定索引中插入。
好的方法是使用EPPlus,就像在这个问题的其他答案中一样,但是当我使用excel文件时,定义名称(命名范围),它无法正常工作。