Я повсюду искал примеры того, как скопировать лист из одной книги в другую. Кажется, все они говорят: используйте Workbook.Worksheets.Add(Name, SheetToCopy).
Мой код ниже делает все, что я хочу, но он не работает в Workbook.Worksheets.add(). Моя цель — объединить содержимое папки с файлами xlsx, каждый из которых имеет одну или несколько вкладок, в один документ.
Приведенный ниже код работает нормально, пока я не доберусь до кнопки «Добавить». Затем я получаю ссылку «Ссылка на объект не установлена на экземпляр объекта». ошибка. Если я не передам объект листа, я получу файл со всеми созданными вкладками, но без данных. Похоже, что он не воспринимает объект листа как реальный. Я подтвердил, что это реально. После его создания я могу получить доступ к любому его свойству.
Есть мысли о том, чего мне здесь не хватает?
Спасибо,
Скотт
`using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Reflection.PortableExecutable;
//using Microsoft.Office.Interop.Excel;
using OfficeOpenXml;
ExcelPackage.LicenseContext = LicenseContext.NonCommercial;
string User = "Scott Smith";
//string srcFilePath = "C:\\Users\\" + User + "\\Documents\\Source\\";
//string tgtFilePath = "C:\\Users\\\" + User + \"\\Documents\\Target\\";
string resultFile = tgtFilePath + "TB 0624.xlsx";
string[] files = Directory.GetFiles(srcFilePath, "*TB 062924.xlsx");
var newFile = new FileInfo(resultFile);
using ExcelPackage tgtPckg = new(newFile);
{
Console.WriteLine(tgtPckg.File.Name);
//tgtPckg.Workbook.Worksheets.Add("Test");
//tgtPckg.Save();
foreach (var file in files)
{
Console.WriteLine(file);
Console.WriteLine(Path.GetFileName(file));
string location= Path.GetFileName(file).Substring(0, 5).Trim();
using ExcelPackage srcPckg = new(new FileInfo(file));
{
foreach (ExcelWorksheet sheet in srcPckg.Workbook.Worksheets)
{
//check name of worksheet, in case that worksheet with same name already exist exception will be thrown by EPPlus
string workSheetName = sheet.Name;
Console.WriteLine(workSheetName);
workSheetName = string.Format("{0}_{1}", location, DateTime.Now.ToString("yyyyMMddhhssmmm"));
Console.WriteLine(workSheetName);
Console.WriteLine("Row Count: " + sheet.Rows.Count().ToString());
//add new sheet
var x = tgtPckg.Workbook.Worksheets.Add(workSheetName, sheet);
x.View.SetTabSelected(false);
}
}
}
tgtPckg.SaveAs(new FileInfo(resultFile));
}`
Подробнее здесь: https://stackoverflow.com/questions/790 ... to-another