博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[C#]_[使用微软OpenXmlSDK (OpenXmlReader)读取xlsx表格] 读取大数据量100万条数据Excel文件解决方案...
阅读量:7037 次
发布时间:2019-06-28

本文共 4338 字,大约阅读时间需要 14 分钟。

 

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); } } } } } } }}

 

转载地址:http://rdnal.baihongyu.com/

你可能感兴趣的文章
gson error
查看>>
安装Nginx
查看>>
Shell中 &>/dev/null和 >/dev/null 2>&1
查看>>
Eclipse Memory Analyzer(Java内存泄漏分析工具)
查看>>
自定义View 购物车加减数量
查看>>
mybatis 打印sql语句
查看>>
git项目时遇到的问题
查看>>
做一个好的程序猿
查看>>
Testlink安装使用
查看>>
Android系统性能调优工具介绍
查看>>
Greenplum如何激活、同步、删除Standby恢复原始Master
查看>>
技术往事:改变世界的TCP/IP协议(珍贵多图、手机慎点)
查看>>
减少tcp连接中的time_wait
查看>>
国内一款仅需150M内存的开源JAVA企业网站系统-MiinE
查看>>
基于maven使用IDEA创建springboot多模块项目
查看>>
才上线的第一个iphone app私人相簿(加密保护您的隐私),请大家支持下
查看>>
资源下载地址
查看>>
gnu autotools
查看>>
Sizeof与Strlen的区别与联系
查看>>
Tomcat的三种模式及并发优化
查看>>