MemoryStream не записывает данные из datatable - PullRequest
0 голосов
/ 12 сентября 2018

У меня есть данные, которые я заполняю данными и перехожу к методу, который должен записать данные в поток памяти и сохранить их как электронную таблицу Excel.Dataatable корректно заполняется, но когда поток памяти записывает его, емкость потока памяти равна 0. Как будто он просто ничего не записывает.Может ли это быть вызвано какой-то утечкой памяти?Ниже приведен мой код, который я использую для написания книги (заполняемой данными) с использованием потока памяти

    public static MemoryStream Grid_Export_Excel(DataTable data)
    {
        try
        {
            var workbook = new XSSFWorkbook();
            var sheet = workbook.CreateSheet();
            var headerRow = sheet.CreateRow(0);

            // Set the column names in the header row
            for (int i = 0; i < data.Columns.Count; i++)
                headerRow.CreateCell(i).SetCellValue(data.Columns[i].ColumnName);

            // Freeze the header row so that it's not scrolled
            sheet.CreateFreezePane(0, 1, 0, 1);

            for (int r = 0; r < data.Rows.Count; r++)
            {
                // Create a new row
                var row = sheet.CreateRow(r + 1);

                // Get the DataRow
                var dataRow = data.Rows[r];

                for (int c = 0; c < data.Columns.Count; c++)
                {
                    // Get the fieldname
                    var fieldname = data.Columns[c].ColumnName;

                    // Make sure that the field exists in the datarow
                    if (!dataRow.Table.Columns.Contains(fieldname))
                        continue;

                    // Create the cell in the row
                    row.CreateCell(c).SetCellValue(dataRow[fieldname].ToString());
                }
            }

            // Write the workbook to a stream and return as FileStreamResult
            MemoryStream ms = new MemoryStream();
            workbook.Write(ms);
            return ms;
        }
        catch (Exception ex)
        {
            throw new Exception(ex.Message);
        }
    }
...