目前有個項目,客戶需求是要把數(shù)據(jù)倒成Excel,找了點資料整理了一番。決定寫一片這樣的文章,第一給自己也是一種鞏固,第二給需要的人也是一種幫助。
(1)首先:添加一個為程序添加一個引用
(2)在程序中using一下
using Excel = Microsoft.Office.Interop.Excel;using System.Reflection;(3)給你的程序中添加一個模板Excle(一個空的Excle文件就行)
這里就起一個名字:temp.xls
(4)按照三層架構(gòu)的思想,以下有2個方法寫在中間層。
第一個方法SCexcle()有2個參數(shù),①把你需要導(dǎo)入 Excle的數(shù)據(jù)集 定義到一個DataTable中,②指向你程序里面前面定義的 temp.xls 模板excel的路徑
1 Excel.Application app;
2 Excel._Workbook wbook;
3 Excel._Worksheet oSheet;
4
5 public string SCexcel(DataTable dt, string pathLong)
6 {
7 string wordPath = pathDownLoad + “temp.xls”; //定義模板的路徑
8 //打開excel文檔
9 app = new Excel.Application();//添加一個 Excle應(yīng)用對象
10
11 //打開工作簿,可見很多參數(shù),第一個就是我們模板的路徑。
12 wbook = app.Workbooks.Open(wordPath, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);
13
14
15 oSheet = (Excel._Worksheet)wbook.Worksheets[1];//創(chuàng)建一張sheet表
16
17 //定義文件保存路徑
18 string filename1 = "report" + System.DateTime.Now.Year + System.DateTime.Now.Month + savechinese + ".xls";//因為保存的不平凡,所以之精確到年和月 。否則就保存到毫秒
19 string filename2 = pathLong + "UpLoadFiles\\" + filename1;//保存在服務(wù)器的路徑
20
21 addExecl(filename2.ToString(), dt);//內(nèi)部的一個方法,把服務(wù)器路徑與之前的數(shù)據(jù)放入addExcle()中,目的是在把數(shù)據(jù)放入Excel中
22
23 //打開后就要關(guān)閉。O(∩_∩)O~
24
25 app.Workbooks.Close();
26 //同樣不要忘記結(jié)束進(jìn)程
27 System.Runtime.InteropServices.Marshal.ReleaseComObject(oSheet);
28 System.Runtime.InteropServices.Marshal.ReleaseComObject(app);
29
30 GC.Collect();//強(qiáng)制對所有代進(jìn)行即時垃圾回收
31
32 }
第二個方法addExecl();我們來看看他是如何處理數(shù)據(jù)的,并且使用你自己想要的格式來定義Excel
1 private void addExecl(string xlsPath, DataTable dt)
2 {
3 4
5 Excel.Range oRng;
6 Excel.Range range;
7
8
9 //標(biāo)題
10 int excel_cur = 1;
11 oSheet.Cells[excel_cur, 1] = "大標(biāo)題";
12 excel_cur++;
13
14 //字段名
15 oSheet.Cells[excel_cur, 1] = "序號";
16 oSheet.Cells[excel_cur, 2] = "字段1";
17 oSheet.Cells[excel_cur, 3] = "字段2";
18 oSheet.Cells[excel_cur, 4] = "字段3";
19 oSheet.Cells[excel_cur, 5] = "字段4";
20 oSheet.Cells[excel_cur, 6] = "字段5";
21 oSheet.Cells[excel_cur, 7] = "字段6";
22 oSheet.Cells[excel_cur, 8] = "字段7";
23 oSheet.Cells[excel_cur, 9] = "字段8";
24 oSheet.Cells[excel_cur, 10] = "字段9";
25 excel_cur++;
26
27 //行數(shù)據(jù)綁定
28 if (dt.Rows.Count > 0)
29 {
30 for (int i = 0; i < dt.Rows.Count; i++)
31 {
32 oSheet.Cells[excel_cur, 1] = dt.Rows[i][0].ToString();
33 oSheet.Cells[excel_cur, 2] = dt.Rows[i][1].ToString();
34 oSheet.Cells[excel_cur, 3] = dt.Rows[i][2].ToString();
35 oSheet.Cells[excel_cur, 4] = dt.Rows[i][3].ToString();
36 oSheet.Cells[excel_cur, 5] = dt.Rows[i][4].ToString();
37 oSheet.Cells[excel_cur, 6] = dt.Rows[i][5].ToString();
38 oSheet.Cells[excel_cur, 7] = dt.Rows[i][6].ToString();
39 oSheet.Cells[excel_cur, 8] = dt.Rows[i][7].ToString();
40 oSheet.Cells[excel_cur, 9] = dt.Rows[i][8].ToString();
41 oSheet.Cells[excel_cur, 10] = dt.Rows[i][9].ToString();
42 excel_cur++;
43
44 }
45 }
46 //格式定義
47 range = (Excel.Range)oSheet.get_Range("A1", "J1");//選中 A1:J1 單元格
48 range.Merge(0);//合并單元格
49 range.VerticalAlignment = Excel.XlVAlign.xlVAlignCenter;//縱向居中
50 range.HorizontalAlignment = Excel.XlVAlign.xlVAlignCenter;//橫向居中
51 range.Font.Size = 18;
52 range.Font.Name = "黑體";
53 range.RowHeight = 24;
54
55 oRng = oSheet.get_Range("A2", "J" + Convert.ToString(dt.Rows.Count + 2));
56 oRng.Borders.LineStyle = 1;
57 oRng.VerticalAlignment = Excel.XlVAlign.xlVAlignCenter;//居中
58 oRng.HorizontalAlignment = Excel.XlVAlign.xlVAlignCenter;
59 oRng.EntireColumn.AutoFit();//列寬自動
60
61 app.Application.DisplayAlerts = false;
62 oSheet.SaveAs(xlsPath, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);//文件保存
63 }
其實還有很多對Excel進(jìn)行的樣式設(shè)置,見下面這個表:
Excel.Application eole = new Excel.Application();效果 | 具體代碼 |
添加新工作簿 | eole.Workbooks.add |
激活指定的工作簿 | eole.WorkSheets("工作簿名").Activate |
設(shè)置第3個工作表為激活工作表 | eole.Worksheets("sheet1").Activate |
打開指定工作簿 | eole.Workbooks.add("E:/E_temp/ABC.xls") |
更改Excel標(biāo)題欄 | eole.Caption="Microsoft Excel" |
給單元格賦值 | eole.cells(行,列).value=XM(XM為數(shù)據(jù)庫字段名) eole.cells(1,4).value='ASDFASDFASDFASDFADSF' |
設(shè)置指定列的寬度(單位:字符個數(shù)) | eole.ActiveSheet.Columns(1).ColumnWidth=5 |
設(shè)置指定行的高度(單位:磅) | eole.ActiveSheet.Rows(1).RowHeight=1/0.035 //設(shè)定行高為1厘米,1磅=0.035厘米 |
在第7行之前插入分頁符 | eole.Worksheets("Sheet1").Rows(7).PageBreak=1 |
在第7列之前刪除分頁符 | eole.ActiveSheet.Columns(7).PageBreak=0 |
指定邊框線寬度(Borders參數(shù)如下) | eole.ActiveSheet.Range("b3:d3").Borders(2).Weight=3 |
設(shè)置四個邊框線條的類型 | eole.ActiveSheet.Range("b3:d3").Borders(1).LineStyle=1 (其中Borders參數(shù):1-左、2-右、3-頂、4-底、5-斜、6-斜/;LineStyle 值:1與7-細(xì)實、2-細(xì)虛、4-點虛、9-雙細(xì)實線) |
設(shè)置頁眉 | eole.ActiveSheet.PageSetup.CenterHeader="報表1" |
設(shè)置頁腳 | eole.ActiveSheet.PageSetup.CenterFooter="第&P頁" |
設(shè)置頁眉到頂端邊距為2厘米 | eole.ActiveSheet.PageSetup.HeaderMargin=2/0.035 |
設(shè)置頁腳到底邊距為3厘米 | eole.ActiveSheet.PageSetup.FooterMargin=3/0.035 |
設(shè)置頂邊距為2厘米 | eole.ActiveSheet.PageSetup.TopMargin=2/0.035 |
設(shè)置底邊距為4厘米 | eole.ActiveSheet.PageSetup.BottomMargin=4/0.035 |
設(shè)置左邊距為2厘米 | eole.ActiveSheet.PageSetup.LeftMargin=2/0.035 |
設(shè)置右邊距為2厘米 | eole.ActiveSheet.PageSetup.RightMargin=2/0.035 |
設(shè)置頁面水平居中 | eole.ActiveSheet.PageSetup.CenterHorizontally=.t. |
設(shè)置頁面垂直居中 | eole.ActiveSheet.PageSetup.CenterVertically=.t. |
設(shè)置頁面紙張大小(1-窄行8?5?11 39-寬行14?11) | eole.ActiveSheet.PageSetup.PaperSize=1 可為下列 XlPaperSize 常量之一(某些打印機(jī)可能不支持所有的這些紙張大小); 常量 數(shù)值 意義; xlPaperLetter 1 Letter (8-1/2 in. x 11 in.) xlPaperA3 8 A3 (297 mm x 420 mm) xlPaperA4 9 A4 (210 mm x 297 mm) xlPaperA4Small 10 A4 Small (210 mm x 297 mm) xlPaperA5 11 A5 (148 mm x 210 mm) xlPaperB4 12 B4 (250 mm x 354 mm) xlPaperB5 13 B5 (182 mm x 257 mm) xlPaperFanfoldUS 39 U.S. Standard Fanfold (14-7/8 in. x 11 in.) xlPaperUser 用戶自定義 |
打印單元格網(wǎng)線 | eole.ActiveSheet.PageSetup.PrintGridlines=.t. |
拷貝整個工作簿 | eole.ActiveSheet.UsedRange.Copy |
拷貝指定區(qū)域 | eole.ActiveSheet.Range("A1:E2").Copy |
粘貼 | eole.Worksheets("sheet2").Activate eole.ActiveSheet.Range("F1").PasteSpecial |
在第2行之前插入一行 | eole.ActiveSheet.Rows(2).Insert |
在第2列之前插入一列 | eole.ActiveSheet.Columns(2).Insert |
設(shè)置字體 | eole.ActiveSheet.Cells(2,1).Font.Name="黑體" |
設(shè)置字體大小 | eole.ActiveSheet.Cells(1,1).Font.Size=25 |
設(shè)置字體為斜體 | eole.ActiveSheet.Cells(1,1).Font.Italic=.t. |
設(shè)置整列字體為粗體 | eole.ActiveSheet.Columns(1).Font.Bold=.t. |
合并單元格 | eole.ActiveSheet.Range("A1:B4").merge |
撤銷合并單元格,上述操作的逆操作 | eole.ActiveSheet.Range("A1:B4").unmerge |
在單元格中設(shè)置公式(一般可以用來實現(xiàn)計算匯總、求平均等很多功能) | eole.cells(1,4).value = "=公式" ** 可以使用所有VBA內(nèi)部函數(shù),如sum()等。注意:不能使用VFP的函數(shù)啊! |
清除單元格公式 | eole.ActiveSheet.Cells(1,4).ClearContents |
打印預(yù)覽工作表 | eole.ActiveSheet.PrintPreview |
打印輸出工作表 | eole.ActiveSheet.PrintOut |
工作表另為 | eole.ActiveWorkbook.SaveAs("c:/temp/22.xls") |
放棄存盤 | eole.ActiveWorkbook.saved=.t. |
關(guān)閉工作簿 | eole.Workbooks.close |
退出Excel | eole.quit |
以上就是本人對Excel一些微不足道的見解。寫的不周到的地方 也請給位多多擔(dān)待。