C# 導出Excel


    目前有個項目,客戶需求是要把數據倒成Excel,找了點資料整理了一番。決定寫一片這樣的文章,第一給自己也是一種鞏固,第二給需要的人也是一種幫助。

    (1)首先:添加一個為程序添加一個引用

 (2)在程序中using一下

using Excel = Microsoft.Office.Interop.Excel;
using System.Reflection;

 (3)給你的程序中添加一個模板Excle(一個空的Excle文件就行)

        這里就起一個名字:temp.xls

 (4)按照三層架構的思想,以下有2個方法寫在中間層。

       第一個方法SCexcle()有2個參數,①把你需要導入 Excle的數據集 定義到一個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應用對象
10 
11            //打開工作簿,可見很多參數,第一個就是我們模板的路徑。
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];//創建一張sheet表
16 
17             //定義文件保存路徑
18               string filename1 = "report" + System.DateTime.Now.Year + System.DateTime.Now.Month + savechinese + ".xls";//因為保存的不平凡,所以之精確到年和月                  。否則就保存到毫秒
19               string filename2 = pathLong + "UpLoadFiles\\" + filename1;//保存在服務器的路徑
20 
21               addExecl(filename2.ToString(), dt);//內部的一個方法,把服務器路徑與之前的數據放入addExcle()中,目的是在把數據放入Excel中
22 
23              //打開后就要關閉。O(∩_∩)O~
24 
25              app.Workbooks.Close();
26               //同樣不要忘記結束進程
27              System.Runtime.InteropServices.Marshal.ReleaseComObject(oSheet);
28              System.Runtime.InteropServices.Marshal.ReleaseComObject(app);
29 
30              GC.Collect();//強制對所有代進行即時垃圾回收
31 
32    }

 

 

         第二個方法addExecl();我們來看看他是如何處理數據的,並且使用你自己想要的格式來定義Excel

       

 1        private void addExecl(string xlsPath, DataTable dt)
 2         {
 3              4            
 5             Excel.Range oRng;
 6             Excel.Range range;
 7 
 8 
 9             //標題
10             int excel_cur = 1;
11             oSheet.Cells[excel_cur, 1] = "大標題";
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             //行數據綁定
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進行的樣式設置,見下面這個表:               

 Excel.Application eole = new Excel.Application();

 

          

效果 具體代碼

添加新工作簿

eole.Workbooks.add

激活指定的工作簿

eole.WorkSheets("工作簿名").Activate

設置第3個工作表為激活工作表

eole.Worksheets("sheet1").Activate

打開指定工作簿

  eole.Workbooks.add("E:/E_temp/ABC.xls")

更改Excel標題欄

eole.Caption="Microsoft Excel"

給單元格賦值

eole.cells(行,列).value=XM(XM為數據庫字段名)
  eole.cells(1,4).value='ASDFASDFASDFASDFADSF'

設置指定列的寬度(單位:字符個數)

eole.ActiveSheet.Columns(1).ColumnWidth=5

設置指定行的高度(單位:磅)

eole.ActiveSheet.Rows(1).RowHeight=1/0.035  //設定行高為1厘米,1磅=0.035厘米

在第7行之前插入分頁符

eole.Worksheets("Sheet1").Rows(7).PageBreak=1

在第7列之前刪除分頁符

eole.ActiveSheet.Columns(7).PageBreak=0

指定邊框線寬度(Borders參數如下)

eole.ActiveSheet.Range("b3:d3").Borders(2).Weight=3

設置四個邊框線條的類型


eole.ActiveSheet.Range("b3:d3").Borders(1).LineStyle=1 

 (其中Borders參數:1-左、2-右、3-頂、4-底、5-斜、6-斜/;LineStyle
值:1與7-細實、2-細虛、4-點虛、9-雙細實線)

設置頁眉

eole.ActiveSheet.PageSetup.CenterHeader="報表1"

設置頁腳

eole.ActiveSheet.PageSetup.CenterFooter="第&P頁"

設置頁眉到頂端邊距為2厘米

eole.ActiveSheet.PageSetup.HeaderMargin=2/0.035

設置頁腳到底邊距為3厘米

eole.ActiveSheet.PageSetup.FooterMargin=3/0.035

設置頂邊距為2厘米

eole.ActiveSheet.PageSetup.TopMargin=2/0.035

設置底邊距為4厘米

 eole.ActiveSheet.PageSetup.BottomMargin=4/0.035

設置左邊距為2厘米

eole.ActiveSheet.PageSetup.LeftMargin=2/0.035

設置右邊距為2厘米

eole.ActiveSheet.PageSetup.RightMargin=2/0.035

設置頁面水平居中

eole.ActiveSheet.PageSetup.CenterHorizontally=.t.

設置頁面垂直居中

 eole.ActiveSheet.PageSetup.CenterVertically=.t.

設置頁面紙張大小(1-窄行8?5?11 39-寬行14?11)

 eole.ActiveSheet.PageSetup.PaperSize=1

可為下列 XlPaperSize 常量之一(某些打印機可能不支持所有的這些紙張大小);
常量 數值 意義;
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 用戶自定義

打印單元格網線

eole.ActiveSheet.PageSetup.PrintGridlines=.t.

拷貝整個工作簿

eole.ActiveSheet.UsedRange.Copy

拷貝指定區域

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

設置字體

eole.ActiveSheet.Cells(2,1).Font.Name="黑體"

設置字體大小

eole.ActiveSheet.Cells(1,1).Font.Size=25

設置字體為斜體

eole.ActiveSheet.Cells(1,1).Font.Italic=.t.

設置整列字體為粗體

eole.ActiveSheet.Columns(1).Font.Bold=.t.

合並單元格

eole.ActiveSheet.Range("A1:B4").merge 

撤銷合並單元格,上述操作的逆操作

eole.ActiveSheet.Range("A1:B4").unmerge

在單元格中設置公式(一般可以用來實現計算匯總、求平均等很多功能)

 

eole.cells(1,4).value = "=公式"

** 可以使用所有VBA內部函數,如sum()等。注意:不能使用VFP的函數啊!

清除單元格公式

eole.ActiveSheet.Cells(1,4).ClearContents

打印預覽工作表

eole.ActiveSheet.PrintPreview

打印輸出工作表

eole.ActiveSheet.PrintOut

工作表另為

eole.ActiveWorkbook.SaveAs("c:/temp/22.xls")

放棄存盤

eole.ActiveWorkbook.saved=.t.

關閉工作簿

eole.Workbooks.close 

退出Excel

eole.quit 

      以上就是本人對Excel一些微不足道的見解。寫的不周到的地方 也請給位多多擔待。

 

 

 

 

 

 

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM