public DataTable ExcelValue(Stream fileStream, string value, int headerRowNum = 0)
{
IWorkbook workbook;
try
{
if (value == "xls")
{
workbook = new HSSFWorkbook(fileStream);
}
else if (value == "xlsx")
{
workbook = new XSSFWorkbook(fileStream);
}
else
{
return null;
}
}
catch (Exception ex)
{
throw new WebApiException(EWebApiResult.BussinessError, "模板文件格式错误,请选择正确的模板。", ex);
}
DataTable table = new DataTable();//创建存储数据的table
try
{
ISheet sheet = workbook.GetSheetAt(0); //获取第一个工作页
table.TableName = workbook.GetSheetName(0); //获取工作页名称
IRow headerRow = sheet.GetRow(headerRowNum);//获取工作页第一行(读取表头)
int cellCount = headerRow.LastCellNum; //获取第一行有多少列(表头列)
for (int i = headerRow.FirstCellNum; i < cellCount; i++) //循环表头列
{
DataColumn column = new DataColumn(headerRow.GetCell(i).ToString()); //获取表头列名
table.Columns.Add(column); //将获取的表头列名设置为table的列名
}
int rowCount = sheet.LastRowNum;//获取记录行数
int firstRowNum = sheet.FirstRowNum + 1 + headerRowNum;//取值开始行数
for (int i = firstRowNum; i <= sheet.LastRowNum; i++)
{
IRow row = sheet.GetRow(i);//读取文件行第i行
DataRow dataRow = table.NewRow();//创建table行
for (int j = row.FirstCellNum; j < cellCount; j++)
{
if (row.GetCell(j) != null)
{
if (row.GetCell(j).CellType == CellType.Numeric)
{
if (HSSFDateUtil.IsCellDateFormatted(row.GetCell(j)))//日期类型
{
dataRow[j] = row.GetCell(j).DateCellValue;
}
else if (!row.GetCell(j).ToString().Contains("%"))//其他数字类型
{
dataRow[j] = row.GetCell(j).NumericCellValue;
}
else
{
dataRow[j] = row.GetCell(j);//将获取的文件单元格内容赋值到table的单元格
}
}
else
{
dataRow[j] = row.GetCell(j);//将获取的文件单元格内容赋值到table的单元格
}
}
else
{
dataRow[j] = "";
}
}
table.Rows.Add(dataRow);//将行添加到table
}
#region 去掉DataTable里的空行
List<DataRow> removelist = new List<DataRow>();
for (int i = 0; i < table.Rows.Count; i++)
{
bool bol = true;
for (int j = 0; j < table.Columns.Count; j++)
{
if (!String.IsNullOrEmpty(table.Rows[i][j].ToString().Trim()))
{
bol = false;
}
}
if (bol)
{
removelist.Add(table.Rows[i]);
}
}
for (int i = 0; i < removelist.Count; i++)
{
table.Rows.Remove(removelist[i]);
}
#endregion
return table;
}
catch (Exception ex)
{
throw new WebApiException(EWebApiResult.DBError, "文件数据有误", ex);
//return table;
}
}
execl转DataTable
最新推荐文章于 2024-12-09 12:03:27 发布