c# 大批量数据导出到excel (使用System.IO导出)

预备知识:
关于excel
workbook:工作簿,每一个xls或xlsx相当于一个工作簿。 
sheet:工作表,每个工作簿可以有多个工作表。工作表相当于一张纸,工作簿相当于一个本子,将过个工作表集合在一起。 
row:行 
column:列 
cell:单元格(表格中的最小单位,接下来导出表格就是对cell进行操作)
 

将DataTable中的大量数据导出到Excel表格中。

但每张Excel表单只能有65536行,所以当DataTable数据多于65536行时,Excel要考虑分页功能。

不使用微软的excel操作类,因为那种实在爆慢,一个个单元格循环写,实在太慢了。

使用io写的话  半分钟都不用

技术要点:1.使用的是StreamWriter sw = new StreamWriter(path, false,Encoding.GetEncoding("gb2312"));最终生成文件
2.使用  StringBuilder sb = new StringBuilder();类把查询出来的数据组合为一句超长字符串一次性插入到excel中,
sb.Append(ds.Tables[0].Columns[k].ColumnName.ToString() + "\t");
注意,可不能漏了"\t" 这个是非常重要的! 因为c# "\t"就等于 键盘上的Tab [朋友们可以试试:打开新的txt然后输入1按Tab,输入2按Tab,输入3按Tab保存,然后打开excel文件  把刚刚保存的txt文件拉进去打开你就发现原来。这样写的话1 2 3 会分别在每个单元格上的了。所以上面才使用 "\t"连起来数据库出来的那堆数据,这样一次性导进去,他们就会按照每个单元格来填充!]

需要引用:
using System.Threading;
using System.IO;

public static void WriteExcel(DataSet ds, string path)
        {
            try
            {
                long totalCount = ds.Tables[0].Rows.Count;
                writeMessage += "共有: " + totalCount + "条数据";
                Thread.Sleep(1000);
                long rowRead = 0;
                float percent = 0;

                StreamWriter sw = new StreamWriter(path, false, Encoding.GetEncoding("gb2312"));
                StringBuilder sb = new StringBuilder();
                for (int k = 0; k < ds.Tables[0].Columns.Count; k++)
                {
                    sb.Append(ds.Tables[0].Columns[k].ColumnName.ToString() + "\t");
                }
                sb.Append(Environment.NewLine);

                for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
                {
                    rowRead++;
                    percent = ((float)(100 * rowRead)) / totalCount;
                  //  Pbar.Maximum = (int)totalCount;
                  //  Pbar.Value = (int)rowRead;
                    writeMessage += "\r\n" +"正在写入[" + percent.ToString("0.00") + "%]...的数据";
                    System.Windows.Forms.Application.DoEvents();

                    for (int j = 0; j < ds.Tables[0].Columns.Count; j++)
                    {
                        sb.Append(ds.Tables[0].Rows[i][j].ToString() + "\t");
                    }
                    sb.Append(Environment.NewLine);
                }
                sw.Write(sb.ToString());
                sw.Flush();
                sw.Close();
                MessageBox.Show("已经生成指定Excel文件!");
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

参考帖子:https://blog.csdn.net/qq_33459369/article/details/79317462

猜你喜欢

转载自blog.csdn.net/zgscwxd/article/details/86574119