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文件解决方案...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python dict getitem_
- 下一篇: python数字的鲁棒输入_请教关于py