1.OpenXmlSDK是个很好的类库,可惜只能通过C#调用,C#的童鞋又福气了。

2.服务端程序由于没法安装office,所以这个对asp.net网站来说是最理想的库了。需要.net 4.0版本以上.

3.以流形式,sax模型读取大文件。

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using DocumentFormat.OpenXml;

using DocumentFormat.OpenXml.Packaging;

using DocumentFormat.OpenXml.Spreadsheet;

namespace ConsoleApplication1

{

class ProductObject

{

public String xinghao;//型号

public String changjia;//厂家

public String pihao;//批号

public String fengzhuang;//封装

public String shuliang;//数量

public void init()

{

//初始化成员变量

}

}

class Program

{

static void Main(string[] args)

{

String fileName = @"E:\software\TestData\xlsx\test.xlsx";

Program pro = new Program();

pro.ReadAllCellValues(fileName);

}

void CallSqlInsert(ProductObject po)

{

//call bl interface method to insert data to database.

//注意处理空值的情况

Console.Out.Write("{0}:{1}:{2}:{3}:{4} ", po.xinghao, po.changjia, po.pihao, po.fengzhuang, po.shuliang);

Console.Out.WriteLine();

}

String GetCellValue(WorkbookPart workbookPart,Cell c)

{

string cellValue;

if (c.DataType != null && c.DataType == CellValues.SharedString)

{

SharedStringItem ssi = workbookPart.SharedStringTablePart.SharedStringTable.Elements().ElementAt(int.Parse(c.CellValue.InnerText));

cellValue = ssi.Text.Text;

}

else

{

cellValue = c.CellValue.InnerText;

}

return cellValue;

}

Boolean StoreProductObject(OpenXmlReader reader, WorkbookPart workbookPart, ProductObject po)

{

reader.ReadFirstChild();

if (reader.ElementType != typeof(Cell))

{

return false;

}

Cell c = (Cell)reader.LoadCurrentElement();

po.xinghao = GetCellValue(workbookPart,c);

reader.ReadNextSibling();

c = (Cell)reader.LoadCurrentElement();

po.changjia = GetCellValue(workbookPart,c);

reader.ReadNextSibling();

c = (Cell)reader.LoadCurrentElement();

po.pihao = GetCellValue(workbookPart,c);

reader.ReadNextSibling();

c = (Cell)reader.LoadCurrentElement();

po.fengzhuang = GetCellValue(workbookPart,c);

reader.ReadNextSibling();

c = (Cell)reader.LoadCurrentElement();

po.shuliang = GetCellValue(workbookPart,c);

return true;

}

//这种SAX的读取方式很高效,至于是读一行提交一行好还是读100行再提交100行好自己决定.

//这种SAX的方式对读取超大xlsx文件不存在内存占用过大和慢的问题.

void ReadAllCellValues(string fileName)

{

using (SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Open(fileName, false))

{

WorkbookPart workbookPart = spreadsheetDocument.WorkbookPart;

ProductObject po = new ProductObject();

foreach (WorksheetPart worksheetPart in workbookPart.WorksheetParts)

{

OpenXmlReader reader = OpenXmlReader.Create(worksheetPart);

while (reader.Read())

{

if (reader.ElementType == typeof(Worksheet))

{

if (reader.ReadFirstChild())

{

SheetProperties properties = (SheetProperties)reader.LoadCurrentElement();

//只处理名字是Sheet1的,其他不处理

if (properties.CodeName != "Sheet1")

{

break;

}

}

}

if (reader.ElementType == typeof(Row))

{

//先调用一个成员函数初始化init,自己写.

po.init();

if (StoreProductObject(reader, workbookPart, po))

{

CallSqlInsert(po);

}

}

}

}

}

}

}

}

C#读取Excel的其中一种方式OleDb读取(100万条)--快速大量插入SQL中

主要运用表类型 Create table BulkTestTable( Id nvarchar(), UserName nvarchar(), Pwd nvarchar() ) Go CREATE T ...

Java 线程池 +生产者消费者+MySQL读取300 万条数据

1.1需求 数据库300 万条用户数据 ,遍历获取所有用户, 各种组合关联, 获取到一个新的json ,存到redis 上. 1.2 难点 数据库比较多, 不可能单线程查询所有的数据到内存. 1.3解 ...

【asp.net】asp.net实现上传Excel文件并读取数据

#前台代码:使用服务端控件实现上传

Vue项目中导入excel文件读取成js数组

1. 安装组件 cnpm install xlsx --save 2. 代码

python读取大数据量xml_[C#]_[使用微软OpenXmlSDK (OpenXmlReader)读取xlsx表格] 读取大数据量100万条数据Excel文件解决方案...相关推荐

  1. 极限挑战—C#100万条数据导入SQL SERVER数据库仅用4秒 (附源码)

    实际工作中有时候需要把大量数据导入数据库,然后用于各种程序计算,本实验将使用5中方法完成这个过程,并详细记录各种方法所耗费的时间. 本实验中所用到工具为VS2008和SQL SERVER 2000.S ...

  2. 导出100万条数据到excel

    导出100万条数据到excel 目的 数据库中有100万条数据,用java程序导入到excel,所花费的时间 演示 过程 eclipse 创建main sqlserver连接数据库程序 TCP/IP连 ...

  3. qt中的mysql能存入多少行数据_Qt中提高sqlite的读写速度(使用事务一次性写入100万条数据)...

    SQLite数据库本质上来讲就是一个磁盘上的文件,所以一切的数据库操作其实都会转化为对文件的操作,而频繁的文件操作将会是一个很好时的过程,会极大地影响数据库存取的速度.例如:向数据库中插入100万条数 ...

  4. kettle如何3秒内写入100万条数据到Redis

    kettle如何3秒内写入100万条数据到Redis 1.实现结果 先来看下实现结果,如下图,本地写入100万数据,耗时2.3s,每秒44万.接下来说说如何实现: 数据存储结构样例: 2.添加redi ...

  5. sql server批量插入数据库的操作100万条数据

    1.数据库中 首先创建表->连接数据库->通过循环插入数据 2.建立测试表 在这里插入代码[c-sharp] view plain copy --Create DataBase creat ...

  6. Oracle查询前100万条数据

    Oracle不支持select top语句,在Oracle中经常是用order by跟rownum select 列名1 ...列名n from ( select 列名1 ...列名n     fro ...

  7. 查询分析300万笔记录_给你100万条数据的一张表,你将如何查询优化?

    1.两种查询引擎查询速度(myIsam 引擎) InnoDB 中不保存表的具体行数,也就是说,执行select count(*) from table时,InnoDB要扫描一遍整个表来计算有多少行. ...

  8. Mysql 给你100万条数据的一张表,你将如何分页查询优化?

    1.两种查询引擎查询速度(myIsam 引擎 ) InnoDB 中不保存表的具体行数,也就是说,执行select count(*) from table时,InnoDB要扫描一遍整个表来计算有多少行. ...

  9. 给你100万条数据的一张表,你将如何查询优化?

    1.两种查询引擎查询速度(myIsam 引擎 ) InnoDB 中不保存表的具体行数,也就是说,执行select count(*) from table时,InnoDB要扫描一遍整个表来计算有多少行. ...

最新文章

  1. [再读书]私有构造函数
  2. 六层感知神经网络系统
  3. 常见挖矿 cpu 算力单位:EH/s 、PH/s、TH/s、Msol/s、Mgps、Kgps
  4. 影响SDN和NFV部署速度的两个因素
  5. 线段树的数组大小下限及证明
  6. random_state的值如何选_同样是防晒衣,单价几十和几百块有什么不同?选防晒衣认准这4点...
  7. 安装指定版本pytorch_Ubuntu16.04安装pytorch(七)
  8. Mac下安装Flink的local模式(flink-1.2.0)
  9. Github发现优秀的开源项目
  10. 微宝球型机器人功能_《宇宙机器人 无线控制器使用指南》评测:与次世代的美好初恋...
  11. 深度学习入门(鱼书)学习笔记
  12. ps使用仿制图章工具,图案图章工具
  13. 简单的amr转换mp3音频格式转换方法
  14. 【云原生|K8s系列第5篇】:实战使用Service暴露应用
  15. Windows 11镜像文件
  16. LeetCode 413.等差数列的划分
  17. 国产小家电品牌如何用dtc模式打造新中产超爆款?
  18. 如何让nextcloud支持avi文件在线播放
  19. P3396 哈希冲突 (根号算法)
  20. Windows XP运行命令

热门文章

  1. hdu1.3.4 排序
  2. mysql]ERROR 1364 (HY000): Field 'ssl_cipher' doesn't have a default value
  3. git修改远程仓库关联
  4. 给Clouderamanager集群里安装基于Hive的大数据实时分析查询引擎工具Impala步骤(图文详解)...
  5. 机器学习基础知识之矩阵
  6. 【Java】判断字符串是否含字母
  7. 移除VS解决方案和TFS服务器的关系
  8. (转)FFMPEG解码H264拼帧简解
  9. 新一代(New Generation)测试框架TestNG
  10. 25个自适应菜单教程和脚本