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. 代码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值