Запись в Excel: невозможно получить доступ к закрытому потоку через EPPLUS

Я посмотрел вокруг, и по большей части я вижу примеры для более сложных проблем, чем мои собственные.

Поэтому мне предложили использовать EPPLUS, а не EXCEL INTEROP из-за улучшения производительности. Это мой первый раз, и я впервые столкнулся с потоками памяти, так что я не совсем уверен, что здесь не так. Я пытаюсь записать в файл Excel и преобразовать этот файл Excel в PDF. Для этого я установил через NUGET следующее:

  1. EPPLUS
  2. EPPLUSExcel

Это мой код:

       if (DGVmain.RowCount > 0)
        {
            //Source
            OpenFileDialog openFileDialog = new OpenFileDialog();
            openFileDialog.Filter = "Excel Files|*.xls;*.xlsx";
            openFileDialog.ShowDialog();
            lblSuccess.Text = openFileDialog.FileName;
            lblPathings = Path.ChangeExtension(openFileDialog.FileName, null);
            int count = DGVmain.RowCount;
            int current = 0;
            int ballast = 0;

Для каждой строки в DataGridView выполните запись в Excel, а затем преобразуйте в PDF.

            foreach (DataGridViewRow row in DGVmain.Rows)
            {
                //Drag
                if (lblSuccess.Text == null)
                    return;
                string drags = Convert.ToString(row.Cells[0].Value);
                string dragsy = Convert.ToString(row.Cells[1].Value);
                Persona = drag;
                generateID();
                //Initialize the Excel File
                try
                {

Вот где я ожидаю, что что-то не так:

                    using (ExcelPackage p = new ExcelPackage())
                    {
                        using (FileStream stream = new FileStream(lblSuccess.Text, FileMode.Open))
                        {
                            ballast++;
                            lblItem.Text = "Item #" + ballast;
                            p.Load(stream);
                            ExcelWorkbook WB = p.Workbook;
                            if (WB != null)
                            {
                                if (WB.Worksheets.Count > 0)
                                {
                                    ExcelWorksheet WS = WB.Worksheets.First();
                                    WS.Cells[82, 12].Value = drag13;
                                    WS.Cells[84, 12].Value = "";
                                    WS.Cells[86, 12].Value = 0;
                                    //========================== Form
                                    WS.Cells[95, 5].Value = drag26;
                                    WS.Cells[95, 15].Value = drag27;
                                    WS.Cells[95, 24].Value = drag28;
                                    WS.Cells[95, 33].Value = drag29;
                                    //========================== Right-Seid
                                    WS.Cells[14, 31].Value = drag27;
                                    WS.Cells[17, 31].Value = drag27;

                                }
                            }
                            Byte[] bin = p.GetAsByteArray();
                            File.WriteAllBytes(lblPathings, bin);
                        }
                        p.Save();
                    }                       
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Write Excel: " + ex.Message);
                }

Отдельный метод для преобразования в PDF, используя EPPLUSEXCEL и SpireXLS.

                finally
                {
                    ConvertToPdf(lblSuccess.Text, finalformat);
                }
            }
        }

Компилятор не выдает никаких ошибок, кроме упомянутой в заголовке.

1 ответ

Решение

Вы уже сохранили ExcelPackage Вот:

Byte[] bin = p.GetAsByteArray();

Поэтому, когда вы позже попытаетесь сохранить его снова здесь:

p.Save();

ExcelPackage уже закрыт. Т.е. удалить Save() позвони в свой код, и ты в порядке.

Другие вопросы по тегам