EPPlus导出两千万行记录到xlsx的c#代码
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导出两千万行记录到xlsx的c#代码的更多相关文章
- EPPlus导出两千万记录的测试代码
采用导入100w条记录一个文件,然后合并的方式 using System; using System.IO; using OfficeOpenXml; using System.Data; using ...
- C# NPOI导出Excel和EPPlus导出Excel比较
系统中经常会使用导出Excel的功能. 之前使用的是NPOI,但是导出数据行数多就报内存溢出. 最近看到EPPlus可以用来导出Excel,就自己测了下两者导出上的差异. NPIO官网地址:http: ...
- C# NPOI导出Excel和EPPlus导出Excel
转自:http://www.cnblogs.com/tanpeng/p/6155749.html 系统中经常会使用导出Excel的功能.之前使用的是NPOI,但是导出数据行数多就报内存溢出. 最近看到 ...
- C# 使用Epplus导出Excel [2]:导出动态列数据
C# 使用Epplus导出Excel [1]:导出固定列数据 C# 使用Epplus导出Excel [2]:导出动态列数据 C# 使用Epplus导出Excel [3]:合并列连续相同数据 C# 使用 ...
- C# 使用Epplus导出Excel [1]:导出固定列数据
C# 使用Epplus导出Excel [1]:导出固定列数据 C# 使用Epplus导出Excel [2]:导出动态列数据 C# 使用Epplus导出Excel [3]:合并列连续相同数据 C# 使用 ...
- linux下python导出sybase 数据库 表记录的方式
导出sybase 数据库 表记录的方式 1 执行启动sybase 数据库命令 code : dbeng7 gkdb 2 执行 连接sybase 数据库命令code : dbisql -c " ...
- XE中FMX操作ListBox,添加上千条记录(含图片)
我之前是想在ListBox的每个Item上添加一个图片,Item上所有的内容都是放在Object里赋值,结果发现加载一百条记录耗时四五秒: procedure TMainForm.AddItem; v ...
- C# 使用Epplus导出Excel [5]:样式
C# 使用Epplus导出Excel [1]:导出固定列数据 C# 使用Epplus导出Excel [2]:导出动态列数据 C# 使用Epplus导出Excel [3]:合并列连续相同数据 C# 使用 ...
- C# 使用Epplus导出Excel [4]:合并指定行
C# 使用Epplus导出Excel [1]:导出固定列数据 C# 使用Epplus导出Excel [2]:导出动态列数据 C# 使用Epplus导出Excel [3]:合并列连续相同数据 C# 使用 ...
随机推荐
- svn删除文件或文件夹后提交失败及解决
svn删除文件夹后提交显示Item 'XXXX' is out of date 有这么几种可能, 1.别人已经提交代码.恰好这个文件或文件夹有改动,这样的情况须要先回复再更新再删除再提交. 2.没有人 ...
- 设置非ARC
设置非ARC: 在build phase 设置中compile sources 选择非arc文件,设置键值为-fno-objc-arc
- Qt写入unicode编码格式的文本(用QChar写入BOM标记,并且列出所有Qt支持的字符集)
1.文本流设置unicode小端模式 2.写入文本前两个字节FF FE 3.字符串转成unicode编码 QList<QByteArray> list = QTextCodec::avai ...
- 大型项目linux自动化版本发布脚本(shell)之tomcat、nginx服务脚本
开发十年,就只剩下这套Java开发体系了 >>> 最近,又临近博主所负责的一个大型项目的发版了.之前有提到过,该项目涉及到30-40台服务器的发版.且项目客户规定发版需在晚上10 ...
- VS版本 与 .NET版本以及C#版本之间的关系
版本 .NET Framework版本 Visual Studio版本 发布日期 特性 C# 1.0 .NET Framework 1.0 Visual Studio .NET 2002 2002.1 ...
- sql 声明 将结果select 而混合值
String slctpsql="select id ,"+uid+","+ddd+","+score+",'"+mar ...
- 恩布拉科业务IM 1.8 版本号,内部沟通软件
恩布拉科业务IM,开源企业IM,免费企业即时通讯,内部沟通平台,Entboost通告v1.8版本号,主要版本更新: 管理中心添加系统监控.集群管理二大功能模块:添加云盘空间.离线消息.文件大小等參数配 ...
- HDU-4432-Sum of divisors ( 2012 Asia Tianjin Regional Contest )
Sum of divisors Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- Delphi 快速获取文件大小(使用_lopen和FileSeek,此函数可以快速获取文件大小,即使文件已经被其它程序锁定)
function GetFileSize(const fName: AnsiString): Int64; var hFile: THandle; begin hFile := _lopen(PAns ...
- 1 开始ThreeJs
因为需要 需要一款 网页上的 游戏引擎 通过百度知道了 three.js 1.先从github上clone下源码 https://github.com/mrdoob/three.js 2.下载web ...