You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
95 lines
3.8 KiB
95 lines
3.8 KiB
using NPOI.XSSF.UserModel;
|
|
using System;
|
|
using System.Data;
|
|
using System.Globalization;
|
|
using System.IO;
|
|
|
|
namespace Infrastructure.Office
|
|
{
|
|
public class ExcelReader : IExcelReader
|
|
{
|
|
public DataSet GetDataSet(Stream stream)
|
|
{
|
|
var workBook = new XSSFWorkbook(stream);
|
|
using var dataSet = new DataSet();
|
|
foreach (var sheet in workBook.GetSheets())
|
|
{
|
|
var dataTable = dataSet.Tables.Add(sheet.SheetName);
|
|
if (sheet.LastRowNum > 0)
|
|
{
|
|
for (int r = 0; r <= sheet.LastRowNum; r++)
|
|
{
|
|
var row = sheet.GetRow(r);
|
|
var dataRow = dataTable.Rows.Add();
|
|
for (int c = 0; c < row.LastCellNum; c++)
|
|
{
|
|
var cell = row.GetCell(c);
|
|
if (cell != null)
|
|
{
|
|
while (dataTable.Columns.Count < c + 1)
|
|
{
|
|
dataTable.Columns.Add().ColumnName = string.IsNullOrEmpty(cell.GetValue().ToString()) ? (c + 1).ToString(CultureInfo.InvariantCulture) : cell.GetValue().ToString();
|
|
}
|
|
dataRow[c] = cell.GetValue();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return dataSet;
|
|
}
|
|
|
|
public byte[] GetFile(DataSet dataSet)
|
|
{
|
|
if (dataSet is null)
|
|
{
|
|
throw new ArgumentNullException(nameof(dataSet));
|
|
}
|
|
var workBook = new XSSFWorkbook();
|
|
using MemoryStream ms = new MemoryStream();
|
|
if (dataSet.Tables.Count > 0)
|
|
{
|
|
for (int i = 0; i < dataSet.Tables.Count; i++)
|
|
{
|
|
var table = dataSet.Tables[i];
|
|
var sheet = workBook.CreateSheet(table.TableName);
|
|
if (table.Rows.Count > 0)
|
|
{
|
|
var sheethead = sheet.CreateRow(0);
|
|
for (int h = 0; h < table.Columns.Count; h++)
|
|
{
|
|
sheethead.CreateCell(h).SetCellValue(table.Columns[h].ColumnName);
|
|
}
|
|
for (int j = 0; j < table.Rows.Count; j++)
|
|
{
|
|
var tableRow = table.Rows[j];
|
|
if (tableRow.ItemArray.Length > 0)
|
|
{
|
|
var sheetRow = sheet.CreateRow(j + 1);
|
|
for (int k = 0; k < tableRow.ItemArray.Length; k++)
|
|
{
|
|
if (table.Columns[k].DataType == typeof(int))
|
|
{
|
|
var cell = sheetRow.CreateCell(k, NPOI.SS.UserModel.CellType.Numeric);
|
|
cell.SetCellValue(Convert.ToInt32(tableRow[k].ToString(), CultureInfo.InvariantCulture));
|
|
}
|
|
else
|
|
{
|
|
var cell = sheetRow.CreateCell(k, NPOI.SS.UserModel.CellType.String);
|
|
cell.SetCellValue(tableRow[k].ToString());
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
workBook.CreateSheet();
|
|
}
|
|
workBook.Write(ms);
|
|
return ms.ToArray();
|
|
}
|
|
}
|
|
} |