常用方法 Excel转换为DataSet
注意一下Excel格式,我平时导入的是xlsx
/// <summary>
/// Excel 转换为 DataSet
/// </summary>
/// <param name="isFirstRowColumn">首行作为列名</param>
/// <param name="fileName"></param>
/// <param name="IsSupportFormula">是否支持公式</param>
/// <returns></returns>
public static DataSet ExcelToDataSet(bool isFirstRowColumn, string fileName, bool IsSupportFormula = true)
{
IWorkbook workbook = null;
DataSet ds = new DataSet();
var fs = new FileStream(fileName, FileMode.Open, FileAccess.Read); #region 初始化Excel if (fileName.IndexOf(".xlsx") > )
{
workbook = new XSSFWorkbook(fs);
}
else if (fileName.IndexOf(".xls") > )
{
workbook = new HSSFWorkbook(fs);
}
else
{
throw new Exception("格式错误!");
}
#endregion for (int sheetIndex = ; sheetIndex < workbook.NumberOfSheets; sheetIndex++)
{
DataTable myTable = new DataTable();
ISheet sheet = null;
int sheetNum = sheetIndex;
sheet = workbook.GetSheetAt(sheetNum); #region 工作表不能为空 if (sheet == null)
{
string str = "";
for (int i = ; i < workbook.NumberOfSheets; i++)
{
str += workbook.GetSheetAt(i).SheetName + ",";
}
str = workbook.NumberOfSheets + str;
throw new Exception($"sheet不能为空!参数:{sheetNum} 工作簿信息:{str}");
}
#endregion #region Excel最大列数 int MaxColumnNum = ;
for (int i = ; i < sheet.LastRowNum; i++)
{
var row = sheet.GetRow(i);
if (row == null)
{
continue;
}
if (row.LastCellNum > MaxColumnNum)
{
MaxColumnNum = row.LastCellNum;
}
}
#endregion //Excel行数
int MaxRowNum = sheet.LastRowNum; #region table新增列 for (int i = ; i < MaxColumnNum; ++i)
{
//首行为列
if (isFirstRowColumn)
{
bool addEmptyCell = true;//是否添加空列
ICell cell = sheet.GetRow().GetCell(i);
if (cell != null)
{
//table列赋值
string cellValue = "";//列名
if (cell.CellType == CellType.Numeric)
{
cellValue = cell.NumericCellValue.ToString();
}
else
{
cellValue = cell.StringCellValue;
}
if (!string.IsNullOrWhiteSpace(cellValue))
{
//列数据为Excel的数据
addEmptyCell = false; if (myTable.Columns.Contains(cellValue))
{
throw new Exception($"已包含列:{cellValue},工作表:{sheet.SheetName}");
}
myTable.Columns.Add(new DataColumn(cellValue));
}
}
if (addEmptyCell)
{
myTable.Columns.Add(new DataColumn(""));//列数据为空
}
}
else
{
myTable.Columns.Add(new DataColumn(i + ""));
}
}
#endregion //起始行
int startRow = ;
if (isFirstRowColumn)
{
startRow = ;
} #region DataTable赋值 for (int i = startRow; i <= MaxRowNum; ++i)
{
IRow row = sheet.GetRow(i);
if (row == null) continue; DataRow NewRow = myTable.NewRow();
for (int j = row.FirstCellNum; j < row.LastCellNum; ++j)
{
ICell cell = row.GetCell(j);
string value = "";
if (cell != null)
{
//table行赋值
if (cell.CellType == CellType.Numeric)
{
value = cell.NumericCellValue.ToString();
//if ((j == 0) && ((i == 6) || (i == 12)))
//{
// //特殊的几个单元格 转换为 日期格式
// value = ToDateTimeValue(cell.NumericCellValue.ToString());
//} }
else if (cell.CellType == CellType.Formula)
{
if (IsSupportFormula)
{
try
{
#region 公式计算 if (fileName.IndexOf(".xlsx") > )
{
XSSFFormulaEvaluator e = new XSSFFormulaEvaluator(cell.Sheet.Workbook);
e.EvaluateInCell(cell);
value = cell.ToString();
}
else if (fileName.IndexOf(".xls") > )
{
HSSFFormulaEvaluator e = new HSSFFormulaEvaluator(cell.Sheet.Workbook);
e.EvaluateInCell(cell);
value = cell.ToString();
}
#endregion
}
catch
{
//日期
if (DateUtil.IsCellDateFormatted(cell))
{
value = cell.DateCellValue.ToString("yyyy-MM-dd");
}
else
{
value = cell.NumericCellValue.ToString();
}
}
}
else
{
throw new Exception($"Excel含有公式 fileName:{fileName} sheetIndex:{sheetIndex + 1} rowIndex:{i + 1} colIndex:{j + 1}\r\n");
} }
else
{
//row.GetCell(j).SetCellType(CellType.String);
value = cell.StringCellValue;
}
}
NewRow[j] = value;
}
myTable.Rows.Add(NewRow);
}
#endregion ds.Tables.Add(myTable);
}
return ds;
}
常用方法 Excel转换为DataSet的更多相关文章
- C# 导入Excel到DataSet中
class Import { /// <summary> /// 导入Excel到DataSet中 /// </summary> /// <param name=&quo ...
- 由 excel 转换为 markdown,及收获
由 excel 转换为 markdown,及收获 1 问题 构建之法(现代软件工程)东北师大站[http://www.cnblogs.com/younggift/]的每周学生作业成绩,执行教学团队[h ...
- Excel.Application SaveAs 把excel转换为html
Excel.Application SaveAs 中的第二个参数的值: 可以直接用 10 进制的值代替左边的这些 xl 类型 . 例如:把excel转换为html的js: var oWB = oXL. ...
- C#, VB.NET如何将Excel转换为PDF
在日常工作中,我们经常需要把Excel文档转换为PDF文档.你是否在苦恼如何以C#, VB.NET编程的方式将Excel文档转换为PDF文档呢?你是否查阅了许多资料,运用了大量的代码,但转换后的效果依 ...
- C#,VB.NET 如何将Excel转换为Text
在工作中,有时我们需要转换文档的格式,之前已经跟大家介绍过了如何将Excel转换为PDF.今天将与大家分享如何将Excel转换为Text.这次我使用的依然是免费版的Spire.XLS for .NET ...
- 两个Xml转换为DataSet方法(C#)
///通过传入的特定XML字符串,通过 ReadXml函数读取到DataSet中.protected static DataSet GetDataSetByXml(string xmlData){ ...
- C# 将Excel转换为PDF
C# 将Excel转换为PDF 转换场景 将Excel转换为PDF是一个很常用的功能,常见的转换场景有以下三种: 转换整个Excel文档到PDF转换Excel文档的某一个工作表到PDF转换Excel文 ...
- Java中excel转换为jpg/png图片 采用aspose-cells-18.6.jar
一 Java中excel转换为jpg/png图片 package com.thinkgem.jeesite.modules.task.util; import com.aspose.cells.Im ...
- C# Excel转换为Json
demo:https://files.cnblogs.com/files/guxingy/Excel%E8%BD%AC%E6%8D%A2%E4%B8%BAJson%E5%AF%B9%E8%B1%A1. ...
随机推荐
- 关于海大邮箱(ouc.edu)客户端配置及使用说明
关于海大邮箱(ouc.edu)客户端配置及使用说明 邮箱说明 系统简介 海大邮箱使用的是论客(Coremail)提供的邮件系统:(很多大学都是) Coremail论客简介(摘自官网): Coremai ...
- NET MVC 上传文件
1.HTML @using (Html.BeginForm("UploadFile", "Student", FormMethod.Post, new { en ...
- CMPP服务端源码
CMPP服务端,带数据库,可以接收第三方CMPP客户端的短信,并存入数据库,结合我的cmpp客户端服务程序,将可以实现接收第三方SP的短信并转发到网关实现发送,并将状态报告.上行短信转发给第三方SP, ...
- 配置 Log4j 以便查看 MyBatis 操作数据库的过程
在 src/main/resources中添加 log4j.properties 配置文件 ,输入如下内 容.#全局面已直 log4j .rootLogger=ERROR, stdout #MyBat ...
- 彻底理解javascript中的this指针
http://javascriptissexy.com/understand-javascripts-this-with-clarity-and-master-it/ https://www.benn ...
- 【转载】Windows系统电脑如何更换盘符号
在笔记本电脑或者办公电脑的使用过程中,有时候需要更换盘符号,例如在重装系统后,硬盘相应的分区盘符号可能会发生错乱变化,此时如果想更换回重装系统之前的盘符号,可以通过计算机管理里面的磁盘管理来实现更换盘 ...
- Jackson动态JSON处理
https://www.baeldung.com/jackson-mapping-dynamic-object https://www.baeldung.com/jackson-deserializa ...
- 阿里sentinel源码研究深入
1. 阿里sentinel源码研究深入 1.1. 前言 昨天已经把sentinel成功部署到线上环境,可参考我上篇博文,该走的坑也都走了一遍,已经可以初步使用它的限流和降级功能,根据我目前的实践,限流 ...
- 85.webpack的安装失败至成功
webpack怎么安装 1.安装node.js; 2.安装webpack: npm install webpack --save-dev : 注意:webpack 4x以上,webpack将命 ...
- linux的bash特性
Shell本身是应用程序,是用户与操作系统之间完成交互式操作的一个接口程序,为用户提供简化的操作. Bourne Again Shell,简称bash,是Linux系统中默认的shell程序. Bas ...