python读取大数据量xml_[C#]_[使用微软OpenXmlSDK (OpenXmlReader)读取xlsx表格] 读取大数据量100万条数据Excel文件解决方案...
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文件解决方案...相关推荐
- 极限挑战—C#100万条数据导入SQL SERVER数据库仅用4秒 (附源码)
实际工作中有时候需要把大量数据导入数据库,然后用于各种程序计算,本实验将使用5中方法完成这个过程,并详细记录各种方法所耗费的时间. 本实验中所用到工具为VS2008和SQL SERVER 2000.S ...
- 导出100万条数据到excel
导出100万条数据到excel 目的 数据库中有100万条数据,用java程序导入到excel,所花费的时间 演示 过程 eclipse 创建main sqlserver连接数据库程序 TCP/IP连 ...
- qt中的mysql能存入多少行数据_Qt中提高sqlite的读写速度(使用事务一次性写入100万条数据)...
SQLite数据库本质上来讲就是一个磁盘上的文件,所以一切的数据库操作其实都会转化为对文件的操作,而频繁的文件操作将会是一个很好时的过程,会极大地影响数据库存取的速度.例如:向数据库中插入100万条数 ...
- kettle如何3秒内写入100万条数据到Redis
kettle如何3秒内写入100万条数据到Redis 1.实现结果 先来看下实现结果,如下图,本地写入100万数据,耗时2.3s,每秒44万.接下来说说如何实现: 数据存储结构样例: 2.添加redi ...
- sql server批量插入数据库的操作100万条数据
1.数据库中 首先创建表->连接数据库->通过循环插入数据 2.建立测试表 在这里插入代码[c-sharp] view plain copy --Create DataBase creat ...
- Oracle查询前100万条数据
Oracle不支持select top语句,在Oracle中经常是用order by跟rownum select 列名1 ...列名n from ( select 列名1 ...列名n fro ...
- 查询分析300万笔记录_给你100万条数据的一张表,你将如何查询优化?
1.两种查询引擎查询速度(myIsam 引擎) InnoDB 中不保存表的具体行数,也就是说,执行select count(*) from table时,InnoDB要扫描一遍整个表来计算有多少行. ...
- Mysql 给你100万条数据的一张表,你将如何分页查询优化?
1.两种查询引擎查询速度(myIsam 引擎 ) InnoDB 中不保存表的具体行数,也就是说,执行select count(*) from table时,InnoDB要扫描一遍整个表来计算有多少行. ...
- 给你100万条数据的一张表,你将如何查询优化?
1.两种查询引擎查询速度(myIsam 引擎 ) InnoDB 中不保存表的具体行数,也就是说,执行select count(*) from table时,InnoDB要扫描一遍整个表来计算有多少行. ...
最新文章
- [再读书]私有构造函数
- 六层感知神经网络系统
- 常见挖矿 cpu 算力单位:EH/s 、PH/s、TH/s、Msol/s、Mgps、Kgps
- 影响SDN和NFV部署速度的两个因素
- 线段树的数组大小下限及证明
- random_state的值如何选_同样是防晒衣,单价几十和几百块有什么不同?选防晒衣认准这4点...
- 安装指定版本pytorch_Ubuntu16.04安装pytorch(七)
- Mac下安装Flink的local模式(flink-1.2.0)
- Github发现优秀的开源项目
- 微宝球型机器人功能_《宇宙机器人 无线控制器使用指南》评测:与次世代的美好初恋...
- 深度学习入门(鱼书)学习笔记
- ps使用仿制图章工具,图案图章工具
- 简单的amr转换mp3音频格式转换方法
- 【云原生|K8s系列第5篇】:实战使用Service暴露应用
- Windows 11镜像文件
- LeetCode 413.等差数列的划分
- 国产小家电品牌如何用dtc模式打造新中产超爆款?
- 如何让nextcloud支持avi文件在线播放
- P3396 哈希冲突 (根号算法)
- Windows XP运行命令
热门文章
- hdu1.3.4 排序
- mysql]ERROR 1364 (HY000): Field 'ssl_cipher' doesn't have a default value
- git修改远程仓库关联
- 给Clouderamanager集群里安装基于Hive的大数据实时分析查询引擎工具Impala步骤(图文详解)...
- 机器学习基础知识之矩阵
- 【Java】判断字符串是否含字母
- 移除VS解决方案和TFS服务器的关系
- (转)FFMPEG解码H264拼帧简解
- 新一代(New Generation)测试框架TestNG
- 25个自适应菜单教程和脚本