blazor上传excel

发布时间 2023-10-24 16:03:34作者: 墨秀铜香

<div class="ant-upload ant-upload-select-text ant-upload-drag ant-upload-select">
<InputFile style="position: absolute;width: 100%;height: 100%;opacity: 0;top: 0;left: 0;z-index:2;" OnChange="SaveImportNos"></InputFile>
<Button Class="w-icon-btn-primary w-icon-btn-32">
<i class="w-icons w-icon-upload"></i>
</Button>
</div>

var file = e.GetMultipleFiles().SingleOrDefault();
using var stream = file.OpenReadStream();
byte[] data = new byte[stream.Length];
await stream.ReadAsync(data, 0, data.Length);

var postMessage = await PageInitializedHelper.GetPostMessage();


var row = await ApiVisitService.CommonPost<CheckBatchCreateDataRequest, List<BatchCheckResult>>("ImportMaster/CheckBatchCreateData", new CheckBatchCreateDataRequest()
{
UserId = postMessage.UserId,
Bytes = data.ToArray(),
//Condition = new List<ConditionModel>(),
//Data = new List<BatchCheckResult>()
});

 

public static DataTable GetExcelToDataTable(byte[] bytes)
{
string path = AppDomain.CurrentDomain.BaseDirectory + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xlsx";
File.WriteAllBytes(path, bytes);

var data = new DataTable();
int startRow = 0;
FileStream fs;
int cellCount = 0;//列数
int rowCount = 0;//行数

fs = new FileStream(path, FileMode.Open, FileAccess.Read);
IWorkbook workbook = new XSSFWorkbook(fs);

//也可以根据sheet编号来获取数据:获取第几个sheet表(此处表示如果没有给定sheet名称,默认是第一个sheet表)
var sheet = workbook.GetSheetAt(0);
if (sheet != null)
{
var firstRow = sheet.GetRow(0);
cellCount = firstRow.LastCellNum; //第一行最后一个cell的编号 即总的列数

for (int i = firstRow.FirstCellNum; i < cellCount; ++i)//第一行列数循环
{
var column = new DataColumn(firstRow.GetCell(i).StringCellValue);//获取标题
data.Columns.Add(column);//添加列
}
startRow = sheet.FirstRowNum + 1;//1(即第二行,第一行0从开始)
rowCount = sheet.LastRowNum;
for (int i = startRow; i <= rowCount; ++i)//循环遍历所有行
{
var row = sheet.GetRow(i);//第几行
if (row == null)
{
continue; //没有数据的行默认是null;
}
//将excel表每一行的数据添加到datatable的行中
var dataRow = data.NewRow();
for (int j = row.FirstCellNum; j < cellCount; ++j)
{
if (row.GetCell(j) != null) //同理,没有数据的单元格都默认是null
{
dataRow[j] = row.GetCell(j).ToString();
}
}
data.Rows.Add(dataRow);
}
}

File.Delete(path);

return data;
}

 

public static List<T> GetList<T>(DataTable table)
{
var list = new List<T>();
var t = default(T);
PropertyInfo[] propertypes = null;
string tempName = string.Empty;
foreach (DataRow row in table.Rows)
{
t = Activator.CreateInstance<T>();
propertypes = t.GetType().GetProperties();
foreach (var pro in propertypes)
{
tempName = pro.Name;
if (table.Columns.Contains(tempName))
{
object value = row[tempName];
if (!value.ToString().Equals(""))
{
pro.SetValue(t, value, null);
}
}
}
list.Add(t);
}
return list.Count == 0 ? null : list;
}