注意一下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的更多相关文章

  1. C# 导入Excel到DataSet中

    class Import { /// <summary> /// 导入Excel到DataSet中 /// </summary> /// <param name=&quo ...

  2. 由 excel 转换为 markdown,及收获

    由 excel 转换为 markdown,及收获 1 问题 构建之法(现代软件工程)东北师大站[http://www.cnblogs.com/younggift/]的每周学生作业成绩,执行教学团队[h ...

  3. Excel.Application SaveAs 把excel转换为html

    Excel.Application SaveAs 中的第二个参数的值: 可以直接用 10 进制的值代替左边的这些 xl 类型 . 例如:把excel转换为html的js: var oWB = oXL. ...

  4. C#, VB.NET如何将Excel转换为PDF

    在日常工作中,我们经常需要把Excel文档转换为PDF文档.你是否在苦恼如何以C#, VB.NET编程的方式将Excel文档转换为PDF文档呢?你是否查阅了许多资料,运用了大量的代码,但转换后的效果依 ...

  5. C#,VB.NET 如何将Excel转换为Text

    在工作中,有时我们需要转换文档的格式,之前已经跟大家介绍过了如何将Excel转换为PDF.今天将与大家分享如何将Excel转换为Text.这次我使用的依然是免费版的Spire.XLS for .NET ...

  6. 两个Xml转换为DataSet方法(C#)

    ///通过传入的特定XML字符串,通过 ReadXml函数读取到DataSet中.protected static DataSet GetDataSetByXml(string xmlData){   ...

  7. C# 将Excel转换为PDF

    C# 将Excel转换为PDF 转换场景 将Excel转换为PDF是一个很常用的功能,常见的转换场景有以下三种: 转换整个Excel文档到PDF转换Excel文档的某一个工作表到PDF转换Excel文 ...

  8. 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 ...

  9. 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. ...

随机推荐

  1. 【题解】Luogu P5327 [ZJOI2019]语言

    原题传送门 看到这种树上统计点对个数的题一般是线段树合并,这题也不出意外 先对这棵树进行树剖,对于每次普及语言,在\(x,y\)两点的线段树上的\(x,y\)两位置打\(+1\)标记,在点\(fa[l ...

  2. 【题解】古代猪文 [SDOI2010] [BZOJ1951] [P2480]

    [题解]古代猪文 [SDOI2010] [BZOJ1951] [P2480] 在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们自由自在生活在那绿色的大草坪,他们善良勇敢相互都关心 ...

  3. 总结:WPF中MultiBinding多值绑定的方法

    原文:总结:WPF中MultiBinding多值绑定的方法 一.Xaml中绑定代码: <TextBlock  Grid.Row="5" Grid.Column="3 ...

  4. .NET Core中如何对Url进行编码和解码

    我们在.NET Core项目中,可以用WebUtility类对Url进行编码和解码,首先我们要确保项目中引入了nuget包:System.Runtime.Extensions 当然这个nuget包默认 ...

  5. 关于visual studio 2015 智能提示英文,而非中文的解决方案

    关于visual studio 2015 智能提示英文,而非中文的解决方案:   找到这个目录 C:\Program Files (x86)\Reference Assemblies\Microsof ...

  6. @Valid注解的使用springmvc pojo校验

    @Valid注解用于校验,所属包为:javax.validation.Valid. ① 首先需要在实体类的相应字段上添加用于充当校验条件的注解,如:@Min,如下代码(age属于User类中的属性): ...

  7. 简要介绍Linux网络服务的种类

    如果有人问你Linux最强大的功能是什么,你大概会回答“是网络功能”.Lmux操作系统的优势之一就是网络功能了,这包含比较稳定的系统资源分配,以及较为安全的网络防护能力,所以许多人都喜欢用它来进行网络 ...

  8. WebStorm eslint插件报错解决 - TypeError: this.CliEngine is not a constructor

    将eslint更新版本后,出现TypeError: this.CliEngine is not a constructor的错误. 解决办法: 1.编辑 X:\WebStorm\plugins\Jav ...

  9. vue项目的一个package.json

    {   "name": "projectName",   "version": "1.0.1",   "des ...

  10. ArrayList的subList方法带来的坑

    最近在项目中遇到了一个问题,由一个对象序列化的结构,在反序列化时一直提示失败,真的百思不得其解啊.在对问题排查了好久之后,才发现是这个序列化的对象中的list调用了ArrayList的sublist方 ...