Excel导出多种方法总结

2024-07-14

Excel导出多种方法总结(共7篇)

篇1:Excel导出多种方法总结

Excel导出

方法一:XML拼接导出

通过stringbuild,将要导出的数据拼接为XML,然后导出。

步骤:

1. 获取数据源

2. 拼xml文件头,给定输出文件格式和编码格式

3. 通过table拼接数据源到xml中

4. 获取导出路径

5. 通过IO流将xml写入,并输出到指定位置

该方法最为简单,但是导出后无法把握内容输出格式(一般为常规格式—HTML)。方法二:Excel对象方法

通过Vs自带的microsoft.Office类创建Excel

步骤:

1. 初始化Excel对象,实例化Excel

2. 定义Application对象,Workbook对象,Worksheet 对象,Range对象

3. 初始化Application对象

4. 创建sheet表,给定表内容格式,5. 绑定数据源,将数据遍历到Excel单元格

6. 给定导出路径导出

7. 异常判断,清空对象,杀掉进程

该方法最为复杂,但是可以直接操作Excel对象,功能丰富,最大却点是创建完成后要处理进程,最大难点是存在Com权限,这对于没有管理员权限的用户难以使用,设置麻烦

方法三:Dataset直接导出

通过Dataset获取数据源,然后拼接到stringbuild可以直接输出

步骤:

1.2.

3.4. 获取数据源 给定输出类型,编码类型 遍历数据 向HTTP输出流中写入取得的数据信息并输出

该方法思路编码都简单,但是在遍历数据时不易处理单元格之间格式而导致,所有数据成一个string输出,并且效率低

方法四:GridView/DataGrid绑定导出

通过GridView或者DataGrid的数据源直接导入到IO中输出

步骤:

1. 初始化GridView、DataGrid

2. 给定GridView、DataGrid样式

3. 绑定GridView、DataGrid数据源

4. 给定输出文件类型和编码类型,文本格式

5. 向HTTP输出流中写入取得的数据信息并输出

该方法效率高,样式丰富,可以设置为文本,较为完美!

篇2:Excel导出多种方法总结

方法1:调用com组件,导出access数据到Excel,就是直接调用access的导出功能,此方法速度超级快

using Access;

Access.ApplicationClass oAccess = new Access.ApplicationClass;

oAccess.Visible = false;

try

{

//ACCESS9:

oAccess.OpenCurrentDatabase(“d:wcf.mdb”,false,“”);

//导出到excel

oAccess.DoCmd.TransferSpreadsheet(Access.AcDataTransferType.acExport,Access.AcSpreadSheetType.acSpreadsheetTypeExcel9,“工作表名”,“d:wcf.xls”,true,null,null);

//导入txt

// oAccess.DoCmd.TransferText(Access.AcTextTransferType.acExportDelim,“”,“Enterprise”,“d:wcf.txt”,true,“”,0);

oAccess.CloseCurrentDatabase();

oAccess.DoCmd.Quit(Access.AcQuitOption.acQuitSaveNone);

System.Runtime.InteropServices.Marshal.ReleaseComObject (oAccess);

oAccess = null;

MessageBox.Show(“导入成功”);

}

catch(Exception ex)

{

MessageBox.Show(ex.ToString());

}

finally

{

GC.Collect();

}

方法2:此方法速度也是超级快,只不过导出的格式非标准的Excel格式,默认工作表名与文件名相同

string FileName=“d:abc.xls”;

System.Data.DataTable dt=new System.Data.DataTable();

FileStream objFileStream;

StreamWriter objStreamWriter;

string strLine=“”;

objFileStream = new FileStream(FileName,FileMode.OpenOrCreate,FileAccess.Write);

objStreamWriter = new StreamWriter(objFileStream,System.Text.Encoding.Unicode);

for(int i=0;i

{

strLine=strLine+dt.Columns[i].ColumnName.ToString()+Convert.ToChar(9);

}

objStreamWriter.WriteLine(strLine);

strLine=“”;

for(int i=0;i

{

strLine=strLine+(i+1)+Convert.ToChar(9);

for(int j=1;j

{

strLine=strLine+dt.Rows[i][j].ToString()+Convert.ToChar(9);

}

objStreamWriter.WriteLine(strLine);

strLine=“”;

}

objStreamWriter.Close();

objFileStream.Close();

方法3:用Ado.net 此方法速度较以上两个显得慢了一些,数据量越大越明显

int Id=0;

string Name=“测试”;

string FileName=“d:abc.xls”;

System.Data.DataTable dt=new System.Data.DataTable();

long totalCount=dt.Rows.Count;

long rowRead=0;

float percent=0;

OleDbParameter[] parm=new OleDbParameter[dt.Columns.Count];

string connString = “Provider=Microsoft.Jet.OLEDB.4.0;Data Source=” + FileName +“;Extended Properties=Excel 8.0;”;

OleDbConnection objConn = new OleDbConnection(connString);

OleDbCommand objCmd = new OleDbCommand();

objCmd.Connection = objConn;

objConn.Open();

//建立表结构

objCmd.CommandText = @“CREATE TABLE Sheet1(序号 Integer,名称 varchar)”;

objCmd.ExecuteNonQuery();

//建立插入动作的Command

objCmd.CommandText = “INSERT INTO Sheet1(”+Id+“,”+Name+“)”;

parm[0]=new OleDbParameter(“@Id”, OleDbType.Integer);

objCmd.Parameters.Add(parm[0]);

parm[1]=new OleDbParameter(“@Company”, OleDbType.VarChar);

objCmd.Parameters.Add(parm[1]);

//遍历DataTable将数据插入新建的Excel文件中

for(int i=0;i

{

parm[0].Value=i+1;

for(int j=1;j

{

parm[j].Value =dt.Rows[i][j];

}

objCmd.ExecuteNonQuery();

rowRead++;

percent=((float)(100*rowRead))/totalCount;

// this.FM.CaptionText.Text = “正在导出数据,已导出[” + percent.ToString(“0.00”) + “%]...”;

if(i==dt.Rows.Count-1)

// this.FM.CaptionText.Text = “请稍后......”;

System.Windows.Forms .Application.DoEvents();

}

objConn.Close();

//this.FM.CaptionText.Text = “”;

方法4:此方法调用com组件,速度都慢于以上3个方法

using Excel;

System.Data.DataTable dt=new System.Data.DataTable();

string FileName=“d:abc.xls”;

long totalCount=dt.Rows.Count;

long rowRead=0;

float percent=0;

Excel.Application xlApp=null;

xlApp=new Excel.Application();

Excel.Workbooks workbooks=xlApp.Workbooks;

Excel.Workbook workbook=workbooks.Add(Excel.XlWBATemplate.xlWBATWorksheet);

Excel.Worksheet worksheet=(Excel.Worksheet)workbook.Worksheets[1];//取得sheet1

Excel.Range range;

//写入字段

for(int i=0;i

{

worksheet.Cells[1,i+1]=dt.Columns[i].ColumnName;

range=(Excel.Range)worksheet.Cells[1,i+1];

}

for(int r=0;r

{

worksheet.Cells[r+2,1]=r+1;

for(int i=0;i

{

// worksheet.Cells[r+2,i+1]=dt.Rows[r][i];

if(i+1!=dt.Columns.Count)

worksheet.Cells[r+2,i+2]=dt.Rows[r][i+1];

}

rowRead++;

percent=((float)(100*rowRead))/totalCount;

// this.FM.CaptionText.Text = “正在导出数据,已导出[” + percent.ToString(“0.00”) + “%]...”;

System.Windows.Forms .Application.DoEvents();

}

range=worksheet.get_Range(worksheet.Cells[2,1],worksheet.Cells[dt.Rows.Count+2,dt.Columns.Count]);

workbook.Saved =true;

workbook.SaveCopyAs(FileName);

//this.FM.CaptionText.Text = “”;

方法5:利用剪贴板,有人说此方法很快,但是我用时,这种方法最慢,请高手指点.

System.Data.DataTable dt=new System.Data.DataTable();

string filePath=@“d:abc.xls”;

object oMissing = System.Reflection.Missing.Value;

Excel.ApplicationClass xlApp = new Excel.ApplicationClass();

try

{

xlApp.Visible = false;

xlApp.DisplayAlerts = false;

Excel.Workbooks oBooks = xlApp.Workbooks;

Excel._Workbook xlWorkbook = null;

xlWorkbook = oBooks.Open(filePath,oMissing,oMissing,oMissing,oMissing,oMissing,oMissing,

oMissing,oMissing,oMissing,oMissing,oMissing,oMissing,oMissing,oMissing);

Excel.Worksheet xlWorksheet;

// 添加入一个新的Sheet页,

xlWorksheet = (Excel.Worksheet)xlWorkbook.Worksheets.Add(oMissing,oMissing,1,oMissing);

// 以TableName作为新加的Sheet页名。

xlWorksheet.Name =“企业名录”;

// 取出这个DataTable中的所有值,暂存于stringBuffer中。

string stringBuffer = “”;

for( int j=0; j

{

for( int k=0; k

{

stringBuffer += dt.Rows[j][k].ToString();

if( k < dt.Columns.Count - 1 )

stringBuffer += “t”;

}

stringBuffer += “n”;

}

// 利用系统剪切板

System.Windows.Forms.Clipboard.SetDataObject(“”);

// 将stringBuffer放入剪切板。

System.Windows.Forms.Clipboard.SetDataObject(stringBuffer);

// 选中这个sheet页中的第一个单元格

((Excel.Range)xlWorksheet.Cells[1,1]).Select();

// 粘贴!

xlWorksheet.Paste(oMissing,oMissing);

// 清空系统剪切板。

System.Windows.Forms.Clipboard.SetDataObject(“”);

// 保存并关闭这个工作簿。

xlWorkbook.Close( Excel.XlSaveAction.xlSaveChanges, oMissing, oMissing );

System.Runtime.InteropServices.Marshal.ReleaseComObject(xlWorkbook);

xlWorkbook = null;

篇3:Excel多种数据汇总方法分析

1 分类汇总

分类汇总是将数据按照某个关键词段分类, 并对关键词段值相同的记录进行汇总的方法。以下面图1“考勤应扣款计算表”为例子, 用分类汇总计算每个部门的基本工资的总和以及扣款合计的总和。

操作如下:先按部门排序 (和排序次序无关, 可以升序排序也可以降序排序) , 然后单击“数据”选项卡的“分类汇总”命令, 在“分类汇总”对话框中选择分类字段为部门, 汇总方式为求和, 汇总项为基本工资和扣款合计, 将得到所需要的汇总结果。

分类汇总的特点:

1) 以三级结构的形式显示出汇总结果和明细数据, 既可只显示汇总数据, 也可以根据需要显示明细数据。

2) 不适合进行多级汇总分析。当分类字段增加或对某一个被汇总字段进行多种不同的汇总时, 需要完成多级分类汇总, 而分级结构的层数增加使得表的结构复杂。如在“考勤应扣款计算表”中计算不同部门、不同职位的基本工资的最大值时或计算不同部门基本工资的最大值和最小值时, 需要做多级分类汇总。

3) 不能直接“剥离”汇总结果。若要复制汇总结果, 简单的操作方式是单击分级显示符号数字2后, 选择汇总结果, 在“定位条件”对话框中选择“可见单元格”, 进行复制粘贴到目标区域。

4) 当数据源需要更新时, 只能在“分类汇总”对话框中选择“删除分类汇总”, 重新完成分类汇总。

2 数据透视表

数据透视表是Excel提供的可用来快速汇总大量数据的工具, 可交互式地进行数据的分析, 被公认为是Excel最强大的数据分析工具。

操作如下:单击目标单元格, 选择“插入”选项卡的“数据透视表”命令, 在“创建数据透视表”命令中选择数据源和数据透视表的位置, 在“数据透视表字段列表”窗格中设置筛选字段、行标签字段、列标签字段、数字字段以及汇总方式。

数据透视表的特点:

1) 运算速度快, 与函数相比, 计算速度提升很快, 可以认为是Excel计算速度最快的功能。

2) 布局结构非常灵活, 修改非常方便。可以用不同的角度对数据进行汇总, 可以对多个汇总字段进行汇总, 也可以对同一个被汇总字段设置不同的汇总方式, 还可以增加计算字段或计算项。

3) 数据透视表的数据源可以是数据列表, 也可以是数据库等外部数据源, 也就是说可以直接根据外部数据源创建数据透视表, 这是其他汇总方式所没有的特点。

4) 数据透视表不能自动更新, 当需要更新时, 需单击数据透视表工具中的“刷新”按钮。

数据透视表功能非常强大, 是用户首选的汇总工具, 但使用时也有一些缺陷。如:

1) Excel 2007开始, 数据透视表创建时不能以多重合并计算数据区域为数据源。若需要使用此项功能, 只能自定义功能区, 自行添加“数据透视表和数据透视图向导”按钮, 并单击此按钮创建数据透视表。

2) 数据透视表对数据透视图的格式有一定的限制。如数据透视图的图表类型不能是XY散点图、股价图及气泡图等, 当对数据透视表进行筛选或刷新时, 数据透视图的有些自定义格式会受到影响。

3 合并计算

合并计算是大家不太熟悉的一个汇总工具。以图1为数据源, 利用合并计算工具计算每个部门的基本工资的总和以及扣款合计项目的总和。

操作如下:先用鼠标单击目标单元格, 再单击“数据”选项卡的“合并计算”按钮, 在“合并计算”对话框中设置参数, 如图2所示, 得到的合并计算的结果如图3所示。

合并计算的特点:

1) 选中“创建指向源数据的链接”复选框, 结果以二级分级结构的形式显示出汇总结果和明细结果, 且计算结果随着数据源的改变自动更新。若没有选中此复选框, 结果将以二维表格的形式显示, 不能显示明细数据, 结果也不能随着数据源的改变自动更新。

2) 合并计算效果有一点类似于一级分类汇总, 但合并计算比分类汇总方便, 不需要排序, 且汇总结果和数据源是分开的。

3) 适合于汇总多个独立的数据列表, 可计算同一工作簿不同工作表或不同工作簿不同工作表中的数据, 前提条件是这些数据所在数据列表具有相同标签, 而且合并计算前工作簿文件需要打开。如汇总12个月每个部门基本工资的总和以及扣款合计的总和, 而每个月的明细数据在不同的工作表内。操作时, 选择目标单元格, 在“合并计算”对话框中将每一张工作表的数据区域添加到引用区域中, 标签位置选择“首行”和“最左列”。

操作时注意, 当创建链接时, 存放合并计算结果的区域不能位于数据源所在的工作表中。

4 模拟运算表 (也称数据表)

模拟运算表是Excel提供的假设分析的数据分析工具, 可以分析模型中参数值的改变对结果的影响。如果要考察一个参数值的改变对结果的影响, 则可以使用单变量模拟运算表。如果考察两个参数值的改变对结果的影响, 则可以使用双变量模拟运算表。在实践中, 也可以用模拟运算表进行数据汇总。

下面以图1为数据源, 用双变量模拟运算表汇总不同部门、不同职位的人数。这时部门可能的值和职位可能的值就是两个可变的参数值, 公式中用数据库函数计算某一个部门某一个职位的人数。

操作如下:在数据列表区域外, 创建数据库函数的条件区域。设条件区域为A18:B19, 其中作为条件值的A19单元格和B19单元格的值各自输入某一部门和某一职位的值, 这两个单元格在模拟运算表中是两个变量参数。选择某一目标单元格A22, 输入数据库函数=DCOUNT (A2:F16, “基本工资”, A18:B19) , 并以A22为交叉点, 在连续的行区域和列区域中输入部门和职位可能的值, 在“模拟运算表”对话框的“输入引用行的单元格”中输入$B$19, “输入引用列的单元格”中输入$A$19, 如图4所示。

若只需汇总每个部门的基本工资的总和以及扣款合计的总和, 则可以利用单变量模拟运算表计算, 公式中可以使用SUMIF函数或DSUM函数。

模拟运算表的特点:1) 模拟运算表需自行设计, 公式和参数的位置以及公式的内容等。结果区域为数组, 不可以单独修改某一个汇总数据。2) 布局上不如数据透视表灵活, 但可以用来描述和分析被汇总字段的值随着汇总参考字段也就是分类字段的值变化的函数关系。当使用数据库函数进行分类统计时, 不需要建立多个不同的条件区域, 只需要一个条件区域即可。3) 数据源改变时, 结果也会自动更新。

5 结论

本文介绍的Excel数据汇总方法, 各自有不同的特点, 适合于不同的情况。即使是数据透视表工具也不是万能的, 也有局限性。因此, 在实践中用户应从实际需求出发, 综合考虑运算速度、布局、数据更新、数据的图形表示等方面的因素, 合理选择最适合的工具, 才能达到最好的效果。

摘要:Excel提供了多种数据汇总方法, 可以对数据列表中所包含的大量数据进行汇总并加以分析, 从而提炼出有助于决策的信息。通过实例, 介绍了几种常用的数据汇总方法的具体应用, 并指出了各自的特点, 可以帮助用户在实践中高效地进行数据分析。

关键词:Excel,数据汇总,数据分析

参考文献

[1]陈景惠.对Excel数据汇总教学方法的探讨[J].硅谷, 2009 (4) :166:167.

[2]王兴德.面向决策的Excel高级数据处理[M].北京:清华大学出版社, 2009.

篇4:Excel导出多种方法总结

・若要将Access中的数据装入 Excel,可以从Access数据表中复制数据并粘贴到Excel工作表中,从Excel工作表连接到Access数据库,或者将Access数据导出到Excel工作表中。

・若要将Excel中的数据装入 Access,可以从Excel工作表复制数据并粘贴到Access数据表中,将Excel工作表导入Access表中,或者从Access表链接到Excel工作表。

注释

・“导入”一词在Excel和Access中的意义各不相同。在Excel中,导入指的是建立一个可刷新的永久数据连接。在Access中,导入则指将数据装入Access中一次,但不建立数据连接。

・您不能将Excel工作簿保存为Access数据库,

Excel 和Access都不提供利用Excel数据创建Access数据库的功能。

在Excel中使用Access数据

如果数据在Access中,但您希望在Excel中使用这些数据:

操作:交换的性质:将Access数据复制到Excel中临时将Access数据导出到 Excel定期从Excel连接到Access数据永久

在Access中使用Excel数据

如果数据在Excel中,但您希望在Access中使用这些数据:

篇5:GAE环境下导出Excel报表

1 GAE应用开发

GAE的应用非常容易建立和维护,GAE起初只支持Python语言,后来逐渐支持多种编程语言。GAE提供了Java运行环境,可以使用标准的Java技术,包括JVM、Java Servlet、Java语言或者任何其他基于JVM的解释语言或编译器,如Javascript或Ruby。GAE提供了一个受限的Python运行环境,包括一个Python解释器和Python标准库。GAE提供的Java和Python环境保证应用运行的快速、安全,不受其他应用的影响。

不同于传统的虚拟主机,GAE提供的是整套构建应用的基础架构平台,可以帮助开发人员获取网络数据、发送邮件、数据存储、图片操作、缓存数据等,以后还会有更多的API推出。开发人员在GAE的框架内开发,不用再考虑CPU、内存、分布等复杂和难以控制的问题,初级的程序员按照GAE的规范也可以写出高性能的应用。但是为了安全考虑,GAE不能直接使用socket、进行文件操作。总之,GAE提供的开发环境,可以让开发更加简单,更关注于业务。

在GAE环境下,可以免费使用500M的存储空间和每月500万次页面刷新,如果想使用更多的资源,可以按需支付费用。

2 生成Excel文件

GAE提供的是受限的Python环境,在此环境下生成Excel文件只能依靠第三方库。pyExcelerator是一个主要用于产生Excel文件的库,能够灵活产生各种带格式的Excel文件,也能够读取已经存在的Excel文件,只是美中不足只能读取Excel单元格的值,而不能读取各个单元格的格式。pyExcelerator完全支持UNICODE,并且支持各种格式设置。最重要的是pyExcelerator是一个跨平台的组件,并不需要Windows平台和COM服务器也能正常使用,这非常符合GAE环境的要求。

pyExcelerator中有多个类用于产生Excel文件,其中常用的有三个:Workbook,Worksheet,XFStyle。Workbook代表一个Excel文件,Worksheet代表一个Excel文件中的一页,XFStyle用于确定产生单元格的格式。

2.1 生成最简单的Excel文件

生成最简单Excel文件的代码如下:

可以看出主要是用Worksheet对象的write方法写入数据的,此函数定义:write(r,c,label="",style=Style.XFStyle())。r、c是要写入数据的单元格的行、列坐标,从0开始,如A1单元就是(0,0),B2单元就是(1,1)。Label参数是要写入的具体内容。最后的style参数指定写入时的格式,这在下面讨论。

2.2 设置单元格字体

设置单元格的字体格式就要使用Font对象,代码如下:

可以看到通过Font对象可以设置各种字体格式,大部分使用方法都在注释中给出,其中比较特殊的两个:escapement用于设置字体的上下标,ESCAPEMENT_NONE不使用上下标,ESCAPEMENT_SUPERSCRIPT使用上标,ESCAPEMENT_SUBSCRIPT使用下标。underline用于设置字体的下划线,UNDERLINE_NONE不使用下划线,UNDERLINE_SINGLE使用单下划线,UNDERLINE_SIN-GLE_ACC使用会计用单下划线,UNDERLINE_DOUBLE使用双下划线,UNDERLINE_DOUBLE_ACC使用会计用双下划线。另外,通过设置一行上某个单元格字体的高度(height)就可以间接的设置此行的行高。

2.3 设置列宽

2.4 设置单元格边框

每个单元格都可以设置其边框,这要通过Borders对象。

可以看出Borders是格式(XFStyle)的一种,它的left、right、top、bottom、diag属性分别设置左、右、上、下、对角五条线的类型,类型共有14种:NO_LINE、THIN、MEDIUM、DASHED、DOTTED、THICK、DOUBLE、HAIR、MEDIUM_DASHED、THIN_DASH_DOTTED、MEDIUM_DASH_DOTTED、THIN_DASH_DOT_DOTTED、MEDIUM_DASH_DOT_DOTTED、SLANTED_MEDIUM_DASH_DOTTED。其中NO_LINE为不显示相应的边框,其它值显示对应线形样式的边框,但diag除外。它的left_colour等以_colour结尾的属性是对应的线的颜色的索引。need_diag1、need_diag2设置是否需要对角线:NEED_DIAG1(或2)需要、NO_NEED_DIAG1(或2)不需要。上面的diag属性只是设置对角线的线形,只有设置need_diag属性为NEED才真正显示对角线。

2.5 设置单元格底纹

设置单元格的底纹要通过Pattern对象。

Pattern的pattern属性指示底纹的图案索引,0为实心,1为75%灰色,2为50%灰色,依次类推,可以参考Excel的帮助文档。pattern_fore_colour、pattern_back_colour指示底纹前景色、背景色的颜色索引。

2.6 生成合并的单元格

生成合并的单元格要通过Worksheet的write_merge、merge方法,write_merge的定义:write_merge(r1,r2,c1,c2,label="",style),merge的定义:merge(r1,r2,c1,c2,style),其中r1,r2指示要合并单元格的起始行、终止行(0为第一行);c1、c2指示要合并单元格的起始列、终止列(0为第一列);label是写入的数据内容;style指示合并后单元格的格式。可以看出merge是write_merge的特殊情况,merge只能执行写入内容为空的合并操作。示例代码如下:

2.7 其他操作

pyExcelerator还有其他操作,包括设置数字单元格的格式、插入图片等,可以参考pyExcelerator的例子和文档,这里不做详细介绍。

3 GAE返回Excel报表

3.1 得到Excel二进制流

pyExcelerator库可以方便的生成Excel文件,但GAE环境却不允许文件操作,也就是说,Workbook的save方法是不允许执行的。如果要返回Excel报表文件,可以参照GAE返回图片的方法,直接将Excel的二进制流返回给浏览器。这就需要修改Workbook和CompoundDoc.XlsDoc的代码,仿照save函数加入返回二进制流的函数:savestream。

这样可以通过Workbook的savestream函数最终得到了Excel文件的二进制流。

3.2 返回Excel流

用户在请求Excel报表的时候就可以将上面生成的Excel二进制流返回了,如同请求一个Excel文件一样。但返回流的时候,还要通过设置HTTP报文头,通知浏览器这是个Excel文件。具体代码如下:

4 结束语

本文给出了GAE编程环境下用pyExcelerator库生成Excel报表的方法,着重介绍了产生带格式Excel文件的方法和将生成的Excel二进制流返回给浏览器的方法。由于GAE是新兴的一种网络应用服务架构,在其上开发的应用越来越多,不论是企业信息产品还是网络服务网站,大多都需要产生Excel报表,因此本文给出的方法具有较强的实用价值。

参考文献

篇6:Excel导出多种方法总结

Excel是Office的重要组成, 是保存统计数据的常用软件格式之一。在程序编制和数据汇总交换过程中, 能否将系统中录入的数据以及查询的结果按标准的格式导出为Excel报表, 以及能否将Excel表中的数据进行整理后批量导入数据库, 以上过程均对系统设计提出了较高要求。基于此, 本文即介绍了在.Net环境下, 使用C#语言实现系统中Excel数据与SQL Server2005数据库中数据的导入导出。

1 设计思路

1.1 数据导入设计思路

在此, 将Excel表格中的数据导入到SQL Server数据库的设计思路进行如下表述:

(1) 由c#程序控制Excel表格, 首先打开Excel表格;

(2) 运用SQL语句, 执行SQL, 并根据不同的规则, 将表格中的数据读入到临时表temp_table中;

(3) 通过对比temp_table和table, 判断是否存在重复的数据, 提示是否重复导入;

(4) 如果重复导入, 可将temp_table的数据直接添加到table中;否则即需将temp_table中除关键字冲突外的其它数据添加到table中。

1.2 数据导出设计思路

相应地, SQL Server数据库中的数据导出到Excel表格的设计思路[1,2,3]可列述如下:

(1) 选择需要导出的数据;

(2) 利用Worksheet类创建Excel工作表对象, 确定即将写入数据的单元格位置;

(3) 从数据库中读取数据, 根据数据类型的不同, 选择不同的写入方式;

(4) 保存Excel表格并退出内存。

数据批量导入和数据批量导出的设计流程可分别表示为如图1和图2所示。

2 关键技术实现

2.1 数据导出

2.1.1 添加COM组件的引用

只有添加Excel的COM组件才能在程序中调用Excel。添加COM组件的引用步骤可做如下实现[4]:

在“解决方案资源管理器”窗口中右击“引用”对象, 并在弹出的快捷菜单中选择“添加引用”;再在弹出的“添加引用”对话框中选择“COM”选项卡, 如果基于Excel 2003, 则选择“Microsoft Excel 11.0 object library”;如果基于Excel 2007, 则选择“Microsoft Excel 12.0 object library”;同时单击“确定”按钮, 即将Excel对象引用到工程中。

需要指出的是, 在编码中主要涉及以下两种处理功能的类:

(1) Microsoft.Office.Interop.Excel.Application:接口, 表示一个Excel程序;

(2) Microsoft.Office.Interop.Excel.Workbook:接口, 表示一个Excel的工作薄。

2.1.2 创建Excel表格

微软的Excel对象模型包括了数百个可供用户交互的对象, 本系统主要使用Application、Workbook、Worksheet和Range四个类及其内含成员。其中, Application对象处于Excel对象模型的顶层, 表示整个Excel应用程序;Workbook对象处于Application对象的下层, 表示一个Excel工作薄文件;Worksheet对象包含于Workbook对象, 表示一个Excel工作表;Range对象包含于worksheet对象之中, 表示Excel工作表中的一个或多个单元格。

创建Excel表格的代码实现过程如下:

Excel.Application excel App=new Excel.Application () ;//创建Excel对象

Excel.Workbook wb=excel App.Workbooks.Open (filename, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing) ;//创建Excel工作薄

Excel.Worksheet ws=wb.Worksheets[1]as Excel.Worksheet;//引用工作表

此时创建的Excel表格ws是一个没有内容的空表格, 接下来将数据导出到该表格中。

2.1.3 将数据库数据导出到Excel

(1) 读取数据表信息

将指定的数据表中的数据读取到Data Set中, 具体步骤如下[5]:

(1) 设置连接数据库字符串; (2) 设置查询语句; (3) 打开数据库连接, 创建SQL数据适配器; (4) 定义Data Set对象DS, 填充数据; (5) 关闭数据库连接。

(2) 向工作表的每个单元格写入数据

工作表变量ws包含有一个“Cell”属性, 这个属性代表Excel表格中的每一个单元格, 通过对“Cell”属性赋值, 从而实现了向Excel表格写入相应数据的设计需要。向Excel工作表写入数据的核心代码如下:

2.1.4 保存Excel表格并退出内存

wb.Save () ;//保存Excel文件

excel App.Quit () ;//关闭Excel对象, 回收资源

2.2 数据导入

2.2.1 打开Excel表格文件

在读取Excel表中数据时, 先是通过文件路径得到Excel文件, 并根据Workbook类获取workbook (工作簿) , 即可访问sheet (工作表) 。对应的实现代码如下:

Excel.Application excel App=new Excel.Application () ;

Excel.Workbook wb=excel App.Workbooks.Open (textBox1.Text, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing) ;

Excel.Worksheet ws=wb.Worksheets[1]as Excel.Worksheet;

2.2.2 将Excel文件数据导入到数据库临时表

通过SQL的Insert语句将Excel对象中的数据插入到指定的数据库表中。该过程的详细代码实现为:

2.2.3 将临时表中的数据导入数据库

在进行插入数据库操作前, 将需要判断插入的数据是否有重复, 如果重复, 则覆盖原数据库中数据。判断的标准, 可视数据库表中主键列数据与导入到临时表中对应的数据是否相同而定。一旦相同, 即删除临时表中对应行数据, 再将临时表中剩余的数据插入到指定表;反之, 一旦不同, 即直接进行数据导入。其程序实现过程可表述为:

3 结束语

本文提出了如下的研究创新, 具体可表述为:本文采用Visual Studio开发平台, 运用基于Office的COM组件技术, 结合Microsoft SQL Server 2005实现了Excel数据导入到数据库表以及数据库表数据导出到Excel。在导入Excel数据文件时, 能实现覆盖导入;而在导出Excel数据文件时, 则能动态添加行, 这种批量的导入导出数据能够提高用户的工作效率。从应用情况看, 该种Excel数据导入导出方法通用性强, 效果理想, 值得推广。

摘要:为了提高信息管理系统中数据导入导出操作的灵活性和通用性, 本文详细介绍了在Visual Studio 2008使用C#语言、通过引用Office的COM组件技术, 结合Microsoft SQL Server 2005实现了Excel数据导入到数据库以及数据库数据导出到Excel的设计思路和实现方法。实践证明该方法有较强的通用性和实用性。

关键词:C#,COM组件,Excel,导入导出

参考文献

[1]李明明.VS.net中用后台线程向Excel中导入数据的研究[J].测控技术, 2011, 30 (8) :83-86.

[2]苏庆, 李忠良, 吴伟民.在C#.NET下实现数据导入Excel的方法研究[J].计算机与现代化, 2011 (4) :29-31.

[3]王森.基于C#的Excel文档导入技术的研究与实现[J].办公自动化, 2011 (16) :54-55.

[4]樊宇.利用COM组件将SQL Server中的数据导入到Excel[J].电脑编程技巧与维护, 2009 (20) :65-66.

篇7:Excel导出多种方法总结

随着我国互联网技术的飞速发展,常规应用程序逐渐由单机模式转向浏览器/服务器(Browser/Server)模式,B/S模式具有以往C/S模式所不及的很多特点,它应用更开放、基本与客户端软硬件无关、应用扩充和系统维护升级都很方便等等,已成为网络应用软件首选的开发模式。其中ASP+SQL技术仍为当前开发B/S模式网络应用程序的常用方法。但是,在ASP网络应用程序开发中常常会遇到根据用户的要求需要将数据打印出来,而通常IE自带的打印功能一般不能满足该需求。据于此,本文探讨并实践了ASP网络应用程序中将数据导出至EXCEL报表中,方便用户编辑与打印。按照应用需求,ASP网络应用程序实现该功能通常有两种情况:

(1)导出至无模板的EXCEL中,即数据库中的记录逐条导出至EXCEL中。

(2)导出至排好格式的EXCEL中,即把数据插入到EXCEL指定位置的单元格中,例如打印详细的单个学生成绩单、教师任课表等。

本文就针对这两种方式,提出编程实现的方法,并给出关键源程序。

1 ASP和ADO相关技术

ASP(Active Server Page)即动态服务器页面,是一套由微软公司开发的服务器端脚本编写环境,使用ASP可以组合HTML网页、脚本命令和ActiveX控件建立动态、交互、高效的Web服务网络应用程序。ADO(ActiveX Data Objects)是微软公司较早开发的数据访问技术,是一个用于存取数据源的COM组件,它提供了编程语言和统一数据访问方式,与OLE DB一起协同工作,以提供通用数据访问,是一种功能强大的数据访问编程模式,是对当前微软所支持的数据库进行操作的最有效和最简单直接的方法。ASP结合ADO技术可以实现对大部分常见数据库的存取操作,从而使得大部分数据源可编程的属性得以直接扩展到ASP网络应用程序中。

ASP网页文件存放在IIS(Internet InformationServer)服务器的根目录下,当客户端浏览器请求调用ASP文件时,服务器会读取该文件,并解释执行Script程序。如果在Script中使用了ADO对象,服务器则根据ADO对象的参数来启动相应的数据库驱动程序,或者直接利用ADO对象,或者通过A-DO对象发送SQL指令,进行数据库存取的操作,最后,把脚本执行结果连同ASP文件中的HTM标识一起合并成一个完整的HTML文件传送到客户浏览器。

2 无模板数据导出至EXCEL

把查询出来的SQL数据库表中的记录集插入到EXCEL中,即通常所说的把SQL表记录转换成EXCEL表,方便编辑和打印。

这种情况实现起来比较简单,不要求进行过多复杂的操作,实现时常采用的步聚为:(1)连接数据库,查询出需要导出的记录集;(2)根据指定的EX-CEL文档的路径和文件名,打开或者新建EXCEL文档;(3)处理标题信息,从数据库中取出所需要的字段名分别写入到EXCEL文档第一行;(4)将查询出来的记录分别写入到EXCEL文档的整行单元格中。关键参考代码如下:

3 数据导出至有模板的EXCEL

根据给定的报表格式,制作一个EXCEL模板(就是要打印的报表的表格),其中需要动态填充网络应用程序数据的单元格就留空,保存为网页格式,将它存放在ASP程序所指定位置的子目录中。浏览运行ASP相关的打印子程序,自动打开EXCEL模板网页文件,根据SQL语句查询出来的数据值插入到报表的留空位置中,最后利用EXCEL应用软件编辑打印即可。

这种情况根据不同的应用实现起来比较复杂,但应用比较灵活。其编程开发实现步聚为:(1)制作好EXCEL模板,修改扩展名为.htm文件,模板如图一所示;(2)使用ADO技术连接数据库;(3)创建EX-CEL.APPLICATION对象并判断客户端是否安装有EXCEL软件;(4)打开htm模板文档并判断是否允许ActriveX控件运行;(5)执行查询命令并将值分别写入到EXCEL文档的不同单位元格中。

在ASP应用程序中创建一个打印子程序,其关键参考代码如下:

4 结束语

以上是在ASP网络应用程序中对数据导出至EXCEL报表的二种方法,没有采用其它复杂的报表控件,特别是第二种导出功能,可以根据实际应用排成不同的版面再导出打印,应用较广,灵活性较大,而且导成EXCEL报表后处理起来比较简单,在实际的办公应用中也比较普遍。因此,在B/S模式下,利用该方法是处理ASP网络应用程序中数据导出打印报表功能的一种较好的解决方案,具有一定的实用价值。

参考文献

[1]强智科技,http://www.qzdatasoft.com/.

[2]陈湘平,李光明.ASP应用程序中实现Excel报表处理[J].空军雷达学院学报,2008,01.

[3]郑烁.ASP操作Excel的技术方案[J].福建电脑,2008(,5).

[4]张秀虎.ASP中Access与Excel数据转换技巧[J].中国教育信息化,2009,(02).

上一篇:getFile项目投资合作协议书下一篇:公司资料文件管理制度