У меня есть несколько файлов 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}");
}
}
}