高效导出到Excel
强烈推荐一个大神的人工智能的教程:http://www.captainbed.net/zhanghan【简介】在这里我用到了File的相关类,主要是Stream类。它的命名空间是System.IO,所以如果想要使用需要先引用该命名空间。在这之前我都是一个数据一个数据的向数据库去更新,导致效率非常的慢,频繁的IO操作降低了系统的性能。其实现原理是将所有的数据拼接成一个字符串,然后...
强烈推荐一个大神的人工智能的教程:http://www.captainai.net/zhanghan
【简介】
在这里我用到了File的相关类,主要是Stream类。它的命名空间是System.IO,所以如果想要使用需要先引用该命名空间。在这之前我都是一个数据一个数据的向数据库去更新,导致效率非常的慢,频繁的IO操作降低了系统的性能。其实现原理是将所有的数据拼接成一个字符串,然后一次性的写入Excel中,这样提高系统的性能。流涉及到三个基本操作:读取流,是从流到数据结构的数据传输;写入,是从数据结构到流的数据传输;查找,对流内的当前位置进行查询和修改
【代码实现】
在此用vb.net定义了一个导出到Excel的过程。先将Excel创建到桌面上,然后对桌面上新建的Excel进行写入操作。
VB.NET版:
<span style="color:#cc33cc;">//VB.NET 版</span>
‘引用命名空间
Imports Microsoft.Office.Interop
Imports System.IO
Dim path As String '获取桌面路径
path = System.Environment.GetFolderPath(Environment.SpecialFolder.Desktop)
Dim MyExce3 As New Microsoft.Office.Interop.Excel.Application() '定义并实例化excel工作表
MyExce3.Application.Workbooks.Add(True) '打开excel工作簿,显示excel界面
MyExce3.ActiveWorkbook.SaveAs(path + "\数据表" & ".xls", ReadOnlyRecommended:=False)
Dim a As String = path + "\数据表" & ".xls" '新创建的Excel的路径
MyExce3.ActiveWorkbook.Close()
MyExce3.Quit()
Dim sw As StreamWriter = New StreamWriter(a, False, System.Text.Encoding.Default)
Dim str As String = ""
Try
Dim i As Integer = 0
'拼接datagridview控件中的表头
While i < dataGridview1.ColumnCount
'在拼接字符串之前先拼接一个制表符(tab)
If i > 0 Then
str += "" & Microsoft.VisualBasic.Chr(9) & ""
End If
str += dataGridview1.Columns(i).HeaderText
i = i + 1
End While
'将拼接的表头一次性写入excel
sw.WriteLine(str)
Dim j As Integer = 1
'将datagridview中剩余的数据进行拼接
While j < dataGridview1.Rows.Count
Dim tempStr As String = ""
Dim k As Integer = 0
While k < dataGridview1.Columns.Count
If k > 0 Then
tempStr += "" & Microsoft.VisualBasic.Chr(9) & ""
End If
tempStr += dataGridview1.Rows(j - 1).Cells(k).Value.ToString
'将加密的数据进行加密
'tempStr += EncryptDes(dataGridview1.Rows(j - 1).Cells(k).Value, "12345678", "abcdefgh")
k = k + 1
End While
'一次性写入
sw.WriteLine(tempStr)
j = j + 1
End While
'关闭excel
MyExce3.Quit()
'释放excel
MyExce3 = Nothing
sw.Close()
MessageBox.Show("保存成功")
C#版:
<span style="color:#cc33cc;">//C#抽象版,将datagridview作为参数</span>
public ExportToExcel(DataGridView datagridview)
{
SaveFileDialog saveFileDialog = new SaveFileDialog();
saveFileDialog.Filter = "Execl files (*.xls)|*.xls";
saveFileDialog.FilterIndex = 0;
saveFileDialog.RestoreDirectory = true;
saveFileDialog.CreatePrompt = false;
saveFileDialog.Title = "导出Excel文件到";
// saveFileDialog.FileName = text;
DialogResult result = saveFileDialog.ShowDialog();
//string str = "";
if (result == DialogResult.OK)
{
Stream myStream;
myStream = saveFileDialog.OpenFile();
StreamWriter sw = new StreamWriter(myStream, System.Text.Encoding.GetEncoding("gb2312"));
string str = "";
try
{
for (int i = 0; i < datagridview.ColumnCount; i++)
{
if (i > 0)
{
str += "\t";
}
str += datagridview.Columns[i].HeaderText;
}
sw.WriteLine(str);
for (int j = 1; j < datagridview.Rows.Count; j++)
{
string tempStr = "";
for (int k = 0; k < datagridview.Columns.Count; k++)
{
if (k > 0)
{
tempStr += "\t";
}
tempStr += datagridview.Rows[j - 1].Cells[k].Value.ToString();
}
sw.WriteLine(tempStr);
}
}
catch (Exception)
{
MessageBox.Show("导出遇到异常", "失败提示");
}
finally
{
MessageBox.Show("成功导出到excel", "提示");
sw.Close();
myStream.Close();
}
}
}
【用处】
大数据时代,数据库是必备的,各种数据库,性能不一,在最初对Access数据库有一个初步了解的时候是在红皮书5个小例子的时候,这次再次用到Access赶脚就是不一样,而且Access相对于Sql执行速度是较慢的,如果上千个数据需要向数据库中保存,频繁的执行IO操作,一定非常的耗费系统的资源。这种便利的方式将一分钟干完的事情缩短到一秒钟,足以看到系统性能的重要性!
【总结】
在学习过程中自己加入的思考都非常的少,自己学习也不踏实。这次研究这些东西是因为客户有需求,自己这种懒惰的想法是不正确的,最近在看一本书,书中的一句话送给看这篇博客的所有人:稍后等于永不(Later equals never),不仅要有思想上移,重要的要和行动下移相搭配。
更多推荐
所有评论(0)