之前在做一个项目的时候,客户方面只提供了一份简单的Excel文件,且要跟现有数据进行对接。

    当时想到的是如果数据量不大,可以Excel一条一条加进去,无奈数据有几十兆!!!

    换了一种思维,进行了导入;当时也试了网上各种帮助类,无奈不是这种问题就是那种问题,甚至还有乱码问题。

    代码虐我千百遍,我待程序如初恋!

    走起,自己写!

    

    分别对现有的Excel文档内容进行了List和DataTable转换:

    Excel转DataTable:

  

  /// <summary>
/// Excel导入到DataTable
/// </summary>
/// <param name="filename">文件名称和路径</param>
/// <param name="sheetname">表名</param>
/// <param name="rowindex">第几行开始</param>
/// <returns></returns>
public static DataTable ExcelToDataTable(string filename, string sheetname = "", int rowindex = )
{
DataTable dt = new DataTable();
using (FileStream fs = new FileStream(filename, FileMode.Open, FileAccess.Read))
{
IWorkbook workbook = new HSSFWorkbook(fs);
ISheet sheet = !sheetname.IsNullOrEmpty() ? workbook.GetSheet(sheetname) : workbook.GetSheetAt();
if (sheet != null)
{
IRow firstrow = sheet.GetRow(rowindex);
int cellcount = firstrow.LastCellNum; for (int i = firstrow.FirstCellNum; i < cellcount; ++i)
{
ICell cell = firstrow.GetCell(i);
string cellValue = cell?.StringCellValue;
if (cellValue == null) continue;
DataColumn column = new DataColumn(cellValue);
dt.Columns.Add(column);
}
rowindex = sheet.FirstRowNum + ;
int rowcount = sheet.LastRowNum;
for (int i = rowindex; i <= rowcount; ++i)
{
IRow row = sheet.GetRow(i);
if (row == null) continue; DataRow dataRow = dt.NewRow();
for (int j = row.FirstCellNum; j < cellcount; ++j)
{
if (row.GetCell(j) != null)
dataRow[j] = row.GetCell(j).ToString();
}
dt.Rows.Add(dataRow);
}
}
}
return dt;
} 调用方法:
  /// <summary>
/// excel导出到dt
/// </summary>
public static void ToDataTable()
{
var table = Excel.ExcelToDataTable("dt7.xls");
}

 

Excel转List:

   /// <summary>
/// Excel导入List对象
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="filename">文件名称和路径</param>
/// <param name="sheetindex">第几个表,默认0为第一个</param>
/// <param name="index">从第几行开始导出,默认为1,不导出表头</param>
/// <returns></returns>
public static List<T> ExcelToList<T>(string filename, int sheetindex = , int index = ) where T : new()
{
List<T> list = new List<T>();
using (FileStream fileStream = new FileStream(filename, FileMode.Open, FileAccess.Read))
{
IWorkbook workbook = new HSSFWorkbook(fileStream);
ISheet sheet = workbook.GetSheetAt(sheetindex);
int startindex = sheet.FirstRowNum;
int endindex = sheet.LastRowNum;
if (index == )
{
startindex += ;
endindex += ;
}
for (int i = startindex; i < endindex; i++)
{
var entity = new T();
IRow row = sheet.GetRow(i);
if (row.Cells.Count > )
{
int j = ;
foreach (PropertyInfo item in typeof(T).GetProperties())
{
if (!Ignore.IgnoreField(item.Name))
continue; ICell cell = row.GetCell(j);
if (cell != null)
{
item.SetValue(entity, ConvertExtension.ChangeType(cell.StringCellValue, item.PropertyType), null);
j++;
}
}
list.Add(entity);
}
}
}
return list;
} 调用方法:
     /// <summary>
/// excel导出到list
/// </summary>
public static void ImportExcel2()
{
var list = Excel.ExcelToList<User>("dt8.xls");
}

 

OK,各位看官,这一期的文章Excel导入写到这里喏,感谢大家的支持,您的支持是我的动力!

下一期给大家带来的是常用的Word操作,敬请期待!!!

Asp.Net 常用工具类之Office—Excel导入(5)的更多相关文章

  1. Asp.Net 常用工具类之Office—Excel导出(4)

    开发过程中各类报表导入导出防不胜防,网上也是各种解决方法层出不穷,比如Excel,CSV,Word,PDF,HTML等等... 网上各种导出插件也是层出不穷,NPOI,微软Microsoft.Offi ...

  2. Asp.Net 常用工具类---Config操作(7)

    近期工作比较忙,忙到忘记写博客(自己的借口,主要加班下班后不想动). 月初的时候,打算每两天写一篇博文,分享自己的一些心得和开发体验,无奈现在只写到第六篇,然而时间已经是20号,岁月不饶人! 总想写点 ...

  3. Asp.Net 常用工具类之Office-文档操作(6)

    文档一直是老大难问题,君不知,代码用时方恨少!有一套成熟的文件帮助类能很大程度上减少寻找各种资料的时间. 记得以前做一个业务,需要导出协议,一份可编辑,一份不可编辑.那么Word和PDF是最好的选择, ...

  4. Asp.Net 常用工具类之加密——非对称加密RSA算法

    踏入程序员这个行业也有几年了,几年中有收获(技术加强),有付出(时间和亚健康状态).当然喏,并不后悔,代码路还长!!! On The Way,永不止步!!! 开发过程中也积累了一些自己的经验.代码块和 ...

  5. Asp.Net 常用工具类之加密——对称加密DES算法(2)

    又到周末,下午博客园看了两篇文章,关于老跳和老赵的程序员生涯,不禁感叹漫漫程序路,何去何从兮! 转眼毕业的第三个年头,去过苏州,跑过上海,从一开始的凌云壮志,去年背起行囊默默回到了长沙准备买房,也想有 ...

  6. C#常用工具类——Excel操作类

    /// 常用工具类——Excel操作类 /// <para> ------------------------------------------------</para> / ...

  7. C#常用工具类——Excel操作类(ZT)

    本文转载于: http://www.cnblogs.com/zfanlong1314/p/3916047.html /// 常用工具类——Excel操作类 /// <para> ----- ...

  8. [C#] 常用工具类——文件操作类

    /// <para> FilesUpload:工具方法:ASP.NET上传文件的方法</para> /// <para> FileExists:返回文件是否存在&l ...

  9. PHP常用工具类

    <?php namespace isslib\Util; use think\Config; /** * 常用工具类 * User: xaxiong * Date: 2016/12/19 * T ...

随机推荐

  1. JS 工具 构建工具

    1.gruntjs http://www.gruntjs.net/ 2.bootstrap http://www.bootcss.com/ 3.

  2. js原生继承之——原型式继承实例

    <!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8&qu ...

  3. mongoDB文档操作

    数据库操作无非就是增.删.改.查.这篇主要介绍增.删.改. 1.增 Mongodb插入操作很简单,使用关键字“insert”.实例: > db.test.blog.insert({"h ...

  4. 如何估算网站日承受最大访问PV

    每个老板或客户都会问架构师这个问题. 你设计的网站能承受多大的日访问量. 程序员都会拍胸脯说出一个心理最大数字.说的时候很有信心.其实这个数字大多是猜的.作为一个理性的程序员怎么能用猜呢? 这里就介绍 ...

  5. node源码详解(六) —— 从server.listen 到事件循环

    本作品采用知识共享署名 4.0 国际许可协议进行许可.转载保留声明头部与原文链接https://luzeshu.com/blog/nodesource6 本博客同步在https://cnodejs.o ...

  6. Linux上使用shell脚本查看内存情况(超实用)

    #!/bin/bashexport chknum=1 #shell搅拌存放目录(输出日志文件执行后也存于该目录)echo 3 > /wls/wls81/shellsyncwhile [ $chk ...

  7. Hadoop 的安装及配置

    Linux RedHat--CentOs     CentOs 6.4 Debian--Ubuntu   VMware 虚拟机 关于虚拟机实现上网的解决办法         NAT: 网络地址转换 当 ...

  8. Python自然语言处理学习笔记之信息提取步骤&分块(chunking)

    一.信息提取模型 信息提取的步骤共分为五步,原始数据为未经处理的字符串, 第一步:分句,用nltk.sent_tokenize(text)实现,得到一个list of strings 第二步:分词,[ ...

  9. Ionic start 创建项目报错 Error with start undefined

    转自:http://blog.csdn.net/wenzigui_qy/article/details/52874542 在Installing npm packages的时候报错,如下: Insta ...

  10. ODBC

    ODBC是80年代末90年代初出现的技术,它为编写关系数据库的客户软件提供了统一的接口.ODBC只提供单一的API,可用于处理不同数据库的客户应用程序.使用ODBC API的应用程序可以与任何具有OD ...