Копирование листов из файлов Excel в новый файл Excel - PullRequest
0 голосов
/ 16 марта 2020

У меня есть несколько файлов Excel, в каждом из которых есть только один лист, моя проблема при попытке скопировать эти листы в новый Excel, я получил эти два исключения:

Ошибка исключения.

Сообщение об ошибке: поток не поддерживает чтение.

Сведения:

в System.IO.FileStream.Read (массив байтов [], смещение Int32, число Int32)
в ICSharpCode .SharpZipLib.Zip.Compression.Streams.InflaterInputBuffer. ()
в ICSharpCode.SharpZipLib.Zip.ZipInputStream.GetNextEntry ()
в NPOI.Open Xml4Net .Util.ZipInputStreamZipEntrySource..ctor (вход ZipInputStream inp)
в 10 NPO *4Net .OP C .ZipPackage..ctor (Поток файлового потока, доступ PackageAccess)
в NPOI.Open Xml4Net .OP C .OPCPackage.Open (Stream in1)
в NPOI.Util.PackageHelper.Open (поток is1)
в НПО I.XSSF.UserModel.XSSFWorkbook..ctor (Stream is1)
at MetroSet_UI_Example.Form1.metroSetButton1_Click (Отправитель объекта, EventArgs e)

И второе исключение:

System.NullReferenceException: 'Ссылка на объект не установлена ​​для экземпляра объекта.'

Кнопка для чтения и создания нового файла:

private void metroSetButton1_Click(object sender, EventArgs e)
{
    if (openFileDialog1.ShowDialog() == DialogResult.OK)
    {
        appuiListBox.Items.Clear();
        appuiGridView.Rows.Clear();

        try
        {
            String appuiName = "";
            XSSFSheet sheet = null;
            //XSSFWorkbook workbookMerged = new XSSFWorkbook(new FileStream("MergedAppuis.xlsx", FileMode.Append, FileAccess.Write));
            XSSFWorkbook workbookMerged = new XSSFWorkbook();

            foreach (String appui in openFileDialog1.FileNames)
            {
                var fileExtension = Path.GetExtension(appui);

                if(fileExtension == ".xlsx")
                {
                    using (var fs = new FileStream(appui, FileMode.Open, FileAccess.Read))
                    {
                        XSSFWorkbook wb = new XSSFWorkbook(fs);
                        sheet = (XSSFSheet)wb.GetSheetAt(0);
                        //((XSSFSheet)wb.GetSheetAt(0)).CopyTo(workbookMerged, sheet.GetRow(25).GetCell(0).StringCellValue, true, true);
                        sheet.CopyTo(workbookMerged, "5454", true, true);
                        //MessageBox.Show(((XSSFSheet)wb.GetSheetAt(0)).SheetName);
                    }
                }
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show($"Exception error.\n\nError message: {ex.Message}\n\n" +
            $"Details:\n\n{ex.StackTrace}");
        }
    }
}
...