EPPlus导出两千万行记录到xlsx的c#代码
2017-12-15 15:36
316 查看
private void button5_Click(object sender, EventArgs e) { Stopwatch watch = new Stopwatch(); BackgroundWorker bw = new BackgroundWorker(); bw.DoWork += new DoWorkEventHandler(delegate { watch.Start(); using (SqlConnection conn = new SqlConnection("server=192.168.255.1; database=db1;uid=sa;pwd=sa;")) { conn.Open(); SqlCommand cmd = new SqlCommand("select * from tblMRP", conn); SqlDataAdapter da = new SqlDataAdapter(cmd); DataSet ds = new DataSet(); da.Fill(ds); var col = ds.Tables[0].Columns.Add("NO", typeof(string)); col.SetOrdinal(0); using (ExcelPackage p = new ExcelPackage(new FileInfo(AppDomain.CurrentDomain.BaseDirectory + Guid.NewGuid().ToString() + ".xlsx"))) { int dd = 1000000; int pages = (int)ds.Tables[0].Rows.Count / dd + 1; if (ds.Tables[0].Rows.Count % dd == 0) pages = pages - 1; for (int i = 1; i <= pages; i++) { DataTable dt = DtSelectTop((i - 1) * dd, Math.Min(i * dd, ds.Tables[0].Rows.Count), ds.Tables[0]); var ws = p.Workbook.Worksheets.Add(ds.Tables[0].TableName + i.ToString()); ws.Cells["A1"].LoadFromDataTable(dt, true); } p.Save(); } } watch.Stop(); }); bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(delegate { MessageBox.Show("用时:" + watch.Elapsed.ToString()); }); bw.RunWorkerAsync(); } public DataTable DtSelectTop(int from ,int to , DataTable oDT) { if (oDT.Rows.Count < from) return oDT; DataTable NewTable = oDT.Clone(); DataRow[] rows = oDT.Select("1=1"); for (int i = from; i < to; i++) { ((DataRow)rows[i])["NO"] = "#" + (i+1).ToString() ; NewTable.ImportRow((DataRow)rows[i]); } return NewTable; }
方法二
public static void ExportByEPPlus(DataTable sourceTable) { Stopwatch watch = new Stopwatch(); watch.Start(); var col = sourceTable.Columns.Add("NO", typeof(string)); col.SetOrdinal(0); FileInfo zfile = new FileInfo(AppDomain.CurrentDomain.BaseDirectory + Guid.NewGuid().ToString() + ".xlsx"); int dd = 1000000 / 1; int pages = (int)sourceTable.Rows.Count / dd + 1; if (sourceTable.Rows.Count % dd == 0) pages = pages - 1; using (ExcelPackage p = new ExcelPackage(zfile)) { using (sourceTable) { for (int i = 1; i <= pages; i++) { ExcelWorksheet ws = p.Workbook.Worksheets.Add(sourceTable.TableName + i.ToString()); int zstart = (i - 1) * dd; int zend = Math.Min(i * dd, sourceTable.Rows.Count); for (int zrow = zstart; zrow < zend; zrow++) { for (int zcol = 0; zcol < sourceTable.Columns.Count; zcol++) { ws.Cells[zrow + 1 - zstart, zcol + 1].Value = sourceTable.Rows[zrow][zcol]; } //Console.WriteLine($"pageindex:{i} ,rows:{zrow}"); } } } GC.Collect(0, GCCollectionMode.Forced); GC.WaitForPendingFinalizers(); p.Save(); } watch.Stop(); Console.Write("用时:" + watch.Elapsed.ToString()); Console.Read(); }
private static bool MergeExcel(string _stFilePath, List<string> _listFiles, string _stSaveFileName) { ExcelPackage epMergeFile = new ExcelPackage(); bool result = true; try { string stSheetName = string.Empty; foreach (string item in _listFiles) { if (!FileIsHave(_stFilePath + "\\" + item)) continue; FileInfo newFile = new FileInfo(_stFilePath + "\\" + item); //开启 using (ExcelPackage pck = new ExcelPackage(newFile)) { //设定ExcelWorkBook ExcelWorkbook workBook = pck.Workbook; if (workBook != null) { if (workBook.Worksheets.Count > 0) { //设置excel表格的页边距 //workBook.Worksheets[1].PrinterSettings.TopMargin = 10M / 2.54M; stSheetName = item.Substring(0, item.LastIndexOf('.')); epMergeFile.Workbook.Worksheets.Add(stSheetName, workBook.Worksheets[1]); } } } } } catch (Exception ex) { result = false; Debug.WriteLine("合并文件失败:" + ex.Message); throw new Exception("合并文件失败!"); } if (result) { string stFile = _stFilePath + "\\" + _stSaveFileName; epMergeFile.SaveAs(new FileInfo(stFile)); epMergeFile.Dispose(); } return result; }
相关文章推荐
- EPPlus导出两千万记录的测试代码
- 导出excel函数代码C#
- 腾讯云短信服务使用记录与.NET Core C#代码分享
- 编写高质量代码改善C#程序的157个建议——建议70:避免在调用栈较低的位置记录异常
- 腾讯云短信服务使用记录与.NET Core C#代码分享
- C#.NET通用权限管理系统组件中用少数几行代码实现记录页面状态
- C#导出网站功能实例代码讲解
- C# 用代码创建 DataSet 和 DataTable 的列和记录
- 记录C#常用的代码片段
- 【代码】C#导出Excel
- java 导出写入xls 代码记录
- C# 一个简单分词程序的思路和代码(四) 键树 查询记录
- 存储过程把找到的记录的MenuOrder值与离他最近的一条进行交换附C#代码
- !!无须定义配置文件中的每个变量的读写操作,以下代码遍历界面中各个c#控件,自动记录其文本,作为配置文件保存
- C#导出的代码,怎么调用?
- C#导出导入到Excel的代码
- asp.net c# repeater或gridview导出EXCEL的详细代码。
- 导出EXCEL代码(C#)
- GridView导出到Excel或Word文件的C#代码
- Android Studio使用gradle导出jar包并混淆代码代码记录二