C#操作excel多种方法比较.docx

上传人:b****5 文档编号:3427375 上传时间:2022-11-23 格式:DOCX 页数:8 大小:21.77KB
下载 相关 举报
C#操作excel多种方法比较.docx_第1页
第1页 / 共8页
C#操作excel多种方法比较.docx_第2页
第2页 / 共8页
C#操作excel多种方法比较.docx_第3页
第3页 / 共8页
C#操作excel多种方法比较.docx_第4页
第4页 / 共8页
C#操作excel多种方法比较.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

C#操作excel多种方法比较.docx

《C#操作excel多种方法比较.docx》由会员分享,可在线阅读,更多相关《C#操作excel多种方法比较.docx(8页珍藏版)》请在冰豆网上搜索。

C#操作excel多种方法比较.docx

C#操作excel多种方法比较

C#操作excel(多种方法比较)

      我们在做excel资料的时候,通常有以下方法。

一.导入导出excel常用方法:

1.用查询表的方式查询并show在数据集控件上。

代码

publicstaticstringstrCon="Provider=Microsoft.Jet.OLEDB.4.0;DataSource=C:

\\08.xls;ExtendedProperties=Excel8.0";

publicstaticDataSetds;

protectedvoidPage_Load(objectsender,EventArgse)

{

OleDbConnectionconn=newOleDbConnection(strCon);

stringsql="select*from[Sheet1$]";

conn.Open();

OleDbDataAdaptermyCommand=newOleDbDataAdapter(sql,strCon);

ds=newDataSet();

myCommand.Fill(ds,"[Sheet1$]");

conn.Close();

datagrid1.DataMember="[Sheet1$]";

datagrid1.DataSource=ds;

datagrid1.DataBind();

//Excel.Applicationexcel=newExcel.Application();

//excel.Application.Workbooks.Add(true);

//excel.Visible=true;

}

 

2.一个一个单元格的进行插入

 

代码

1stringstr=@"DataSource=IT-428E4EA4B0C7\SQLEXPRESS;InitialCatalog=TestBase;IntegratedSecurity=True";

2SqlConnectionconn=newSqlConnection(str);

3conn.Open();

4intn=0;

5for(inti=1;i<20;i++)

6{

7if(n>3)

8break;

9else

10if(msheet.Cells.get_Range("A"+i,Type.Missing).Text.ToString()==""&&n<=3)

11{n++;}

12else

13{

14 //循环获取excel单元格的值一次一次的插入,excuteSql为执行的存储过程

15 excuteSql(msheet.Cells.get_Range("B"+i,Type.Missing).Text.ToString(),

16msheet.Cells.get_Range("B"+(i+1),Type.Missing).Text.ToString(),

17msheet.Cells.get_Range("B"+(i+2),Type.Missing).Text.ToString(),

18conn);

19i=i+3;

20

21}

22}

23

24conn.Close();

二快速导入导出

1.我们都知道当向db里批量插入数据的时候我们会选择SqlBulkCopy

if (dataTable!

=null && dataTable.Rows.Count!

=0)

            {

                sqlBulkCopy.WriteToServer(dataTable);

            } 

这个可以看 深山老林新发的一篇SQLServer中批量插入数据方式的性能对比下面是SqlBulkCopy的方法,这个方法有一个弊端就是当excel某一列即有文字,还有日期的时候,会出现null值,我在网上查了一些资料说连接字串加上;HDR=YES;IMEX=1'的时候会都当做字符处理,但是还是会出现一些bug,所以建议最好先把excel数据分析到datatable里然后再用SqlBulkCopy倒入数据库

  

 

代码

1//blockcopytoDBfromExcel

2//Byxijun,

3//step1createanexcelfileC:

\Inetpub\wwwroot\test.xls,fillcell(1,1)with"Data",cell(1,2)with"name"

4//step2createtablenamed"Data"with2column("data","name")inyourDB

5//therethecodebelow:

6DateTimet1=DateTime.Now;

7Response.Write("
starttime:

"+t1.ToString());

8stringExcelFile=@"C:

\\20090916_Hub_Report.xls";

9stringexcelConnectionString=@"Provider=Microsoft.Jet.OLEDB.4.0;DataSource="+ExcelFile+";ExtendedProperties='Excel8.0;HDR=YES;IMEX=1'";

10

11using(OleDbConnectionexcelConnection=newOleDbConnection(excelConnectionString))

12{

13

14excelConnection.Open();

15//Gettingsourcedata

16//非空讀入數據

17OleDbCommandcommand=newOleDbCommand("Select[Region],[CustomerPN],[RMA],[Date],[QTY],[Return/Pull]FROM[20090916_Hub_Report$]",excelConnection);

18//InitializeSqlBulkCopyobject

19

20using(OleDbDataReaderdr=command.ExecuteReader())

21{

22//Copydatatodestination

23stringsqlConnectionString=@"DataSource=MININT-G87PHNA\SQLEXPRESS;InitialCatalog=GDS_Service;IntegratedSecurity=True";

24using(SqlBulkCopybulkCopy=newSqlBulkCopy(sqlConnectionString))

25{

26bulkCopy.DestinationTableName="GDS_Hub_data";

27//加入只加入一個列的話,那么就會其他數據庫列都默認為空。

28bulkCopy.ColumnMappings.Add("Region","region");

29bulkCopy.ColumnMappings.Add("CustomerPN","customer_item_number");

30bulkCopy.ColumnMappings.Add("RMA","Rma");

31bulkCopy.ColumnMappings.Add("Date","date");

32bulkCopy.ColumnMappings.Add("QTY","Qty_1");

33bulkCopy.ColumnMappings.Add("Return/Pull","return_pull");

34//bcp.BatchSize=100;//每次传输的行数

35//bcp.NotifyAfter=100;//进度提示的行数

36bulkCopy.BatchSize=100;

37bulkCopy.NotifyAfter=100;

38bulkCopy.WriteToServer((IDataReader)dr);

39

40

41}

42}

43//Closingconnection

44excelConnection.Close();

45}

46

47DateTimet2=DateTime.Now;

48Response.Write("
Endtime:

"+t2.ToString());

49Response.Write("
usetime:

"+((TimeSpan)(t2-t1)).Milliseconds.ToString()+"Milliseconds");

50Response.Write("
inserrecordcount:

3307");

 2.快速导出db的数据到excel

这种方法就是利用

 Excel.QueryTables 

 Excel.QueryTable

Querytable把数据快速导入excel里。

我们在做复杂报表的时候,这个用的是比较多了,但是单单会这个没有用,它只是快速的把db里的数据放放到excel里,

在做大量数据而且需要设定excel样式的时候我们会选择先用这种方法把数据导入excel一个临时sheet,再利sheet复制,sheet移动,和一些excel样式设定,以及

excel一个强大的自动填充的功能,那么这些就可以让我们快速的做出花样多试的excel报表,当然这个要求我们比较熟练office的操作,包括宏的操作。

代码

1publicstringquery_table_getdata(stringsourpath)

2{

3stringstr_path=sourpath.Substring(0,sourpath.Length-22);

4str_path=str_path+"basic.xls";

5

6Excel.QueryTablesm_objQryTables=null;

7Excel.QueryTablem_objQryTable=null;

8Excel.Applicationm_objExcel=null;

9Excel.Workbooksm_objBooks=null;

10Excel.Workbookm_objBook=null;

11Excel.Sheetsm_objSheets=null;

12Excel.Worksheetm_objSheet=null;

13Excel.Rangem_objRange=null;

14m_objExcel=newExcel.Application();

15

16//try

17//{

18m_objBooks=m_objExcel.Workbooks;

19m_objBooks.Open(sourpath,Type.Missing,Type.Missing,Type.Missing,Type.Missing,

20Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing);

21

22m_objBook=(Excel.Workbook)m_objBooks.get_Item

(1);

23

24

25m_objSheets=(Excel.Sheets)m_objBook.Worksheets;

26m_objSheet=(Excel.Worksheet)m_objSheets.get_Item

(1);

27m_objRange=m_objSheet.get_Range("A2",Type.Missing);

28m_objQryTables=m_objSheet.QueryTables;

29stringsqlstr="SELECT[day01],[day02],[day03],[day04],[day05],[day06],[day07],[day08],[day09],[day10],[day11],[day12],[day13],[day14]";

30sqlstr+=",[week01],[week02],[week03],[week04],[week05],[week06],[week07],[week08],[week09],[week10],[week11],[week12],[week13],[week14]";

31sqlstr+=",[week15],[week16],[week17],[week18],[week19],[week20],[week21],[week22],[week23],[week24]";

32sqlstr+="FROM[GDS_Service].[dbo].[GDS_Service_Report_Base]orderbygroupID,id";

33//可以放在配置文件里

34stringconn=@"Provider=SQLOLEDB.1;DataSource=MININT-G87PHNA\SQLEXPRESS;uid=xijun_ke;Password=12345678;

InitialCatalog=GDS_Service;PersistSecurityInfo=False;";

35

36m_objQryTable=(Excel.QueryTable)m_objQryTables.Add("OLEDB;"+conn,m_objRange,sqlstr);

37

38m_objQryTable.RefreshStyle=Excel.XlCellInsertionMode.xlInsertEntireRows;

39

40m_objQryTable.Refresh(false);

41m_objBook.SaveAs(str_path,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Excel.XlSaveAsAccessMode.xlExclusive,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing);

42m_objBook.Close(false,Type.Missing,Type.Missing);

43//}

44//catch(Exceptionee)

45//{

46//mp.WriteLog(ee.ToString());

47//}

48//finally

49//{

50m_objExcel.Quit();

51GC.Collect();

52//}

53returnstr_path;

54

55}

com操作excel的一些特性操作:

 

range.NumberFormatLocal = "@";     //设置单元格格式为文本

range = (Range)worksheet.get_Range("A1", "E1");     //获取Excel多个单元格区域:

本例做为Excel表头

range.Merge(0);     //单元格合并动作

worksheet.Cells[1, 1] = "Excel单元格赋值";     //Excel单元格赋值

range.Font.Size = 15;     //设置字体大小

range.Font.Underline=true;     //设置字体是否有下划线

range.Font.Name="黑体";     设置字体的种类

range.HorizontalAlignment=XlHAlign.xlHAlignCenter;     //设置字体在单元格内的对其方式

range.ColumnWidth=15;     //设置单元格的宽度

range.Cells.Interior.Color=System.Drawing.Color.FromArgb(255,204,153).ToArgb();     //设置单元格的背景色

range.Borders.LineStyle=1;     //设置单元格边框的粗细

range.BorderAround(XlLineStyle.xlContinuous,XlBorderWeight.xlThick,XlColorIndex.xlColorIndexAutomatic,System.Drawing.Color.Black.ToArgb());     //给单元格加边框

range.EntireColumn.AutoFit();     //自动调整列宽

Range.HorizontalAlignment= xlCenter;     // 文本水平居中方式

Range.VerticalAlignment= xlCenter     //文本垂直居中方式

Range.WrapText=true;     //文本自动换行

Range.Interior.ColorIndex=39;     //填充颜色为淡紫色

Range.Font.Color=clBlue;     //字体颜色

xlsApp.DisplayAlerts=false;     //保存Excel的时候,不弹出是否保存的窗口直接进行保存

  workbook.SaveCopyAs(temp);/**////填入完信息之后另存到路径及文件名字

excel宏操作,sheet和单元格操作:

代码

1///

2///讀取excel數據和插入公式

3///

4///

5///

6protectedvoidButton2_Click(objectsender,EventArgse)

7{

8DateTimet1=DateTime.Now;

9Response.Write("
starttime:

"+t1.ToString());

10Excel.Applicationexcelkk=newExcel.Application();

11

12excelkk.Workbooks.Add(true);

13introw=2;

14DataTablemyTable=ds.Tables["[Sheet1$]"];

15for(inti=0;i

16{

17excelkk.Cells[1,1+i]=myTable.Columns[i].ColumnName.ToString();

18}

19for(inti=0;i

20{

21for(intj=0;j

22{

23excelkk.Cells[row,j+1]=myTable.Rows[i][j].ToString();

24}

25

26row++;

27}

28

29

30//取得特定單元格的值

31excelkk.Visible=true;

32this.TextBoxChange.Text=excelkk.get_Range("A2",Type.Missing).Text.ToString();

33//表的單元格合并

34Excel.Rangerange1=excelkk.get_Range("A2","D4");

35range1.Merge(Type.Missing);

36

37

38

39

40//想表格中插入求和的值

41Excel.Rangerange2=excelkk.get_Range("B25",Type.Missing);

42range2.Formula="=SUM(B2:

B24)";

43range2.Calculate();

44

45//進行宏的循環應用與單元格的刪除和添加,多個單元格默認宏自動操作。

46Excel.Rangerange3=excelkk.get_Range("B25","E25");

47range2.AutoFill(range3,Excel.XlAutoFillType.xlFillDefault);

48//刪除表的指定行數操作

49Excel.Rangerange7=null;

50range7=excelkk.get_Range(excelkk.Cells[2,2],excelkk.Cells[4,4]);

51range7.Select();

52range7.EntireRow.Delete(Excel.XlDirection.xlUp);

53

54//獲取最大用過的行數

55Excel.Worksheetwsheet1=(Excel.Worksheet)excelkk.Worksheets.get_Item

(1);

56intn=wsheet1.UsedRange.Cells.Columns.Count;

57Response.Write(n.ToString()+"
");

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 外语学习 > 其它语言学习

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1