C#中OWC11的一些使用細節

1.技術要點

1.1.    Excel試驗:

A.   Excel嵌入網頁的方法。html

1.       在後臺用流的方式返回給前臺頁面展示;web

2.       在後臺講Excel格式數據定好保存到本地,在前臺頁面用html標籤加載展現;數據庫

B.       Excel顯示格式的控制。數組

1.       Excel單元格格式設置,默認爲常規類型;安全

2.       上下標格式的控制;app

3.       單元格水平垂直對齊方式;框架

4.       單元格邊框設置;函數

5.       單元格合併;工具

6.       字體設置,包括字體的顏色、大小、粗體、斜體、字體、下劃線等;字體

7.       凍結行列;

8.       公式欄的顯示與隱藏;

9.       行標題和列表題的顯示與隱藏;

10.     網格的顯示與隱藏;

11.     水平滾動條和垂直滾動條的顯示與隱藏;

12.     Sheet頁的顯示與隱藏;

C.       向Excel中填充數據,並導出爲臨時文件。

1.2.    OWC試驗:

A.       OWC組件在web頁面展現的方法。

1.       將OWC中Sheet導出爲本地Excel文件,再將導出的文件呈現到Web頁面;

2.       後臺把配置好的Sheet直接以流文件方式返回到Web頁面展示;

3.       用html標籤將OWC展示在Web頁面,加載後臺程序導出到本地的文件(xml、html、csv格式)來顯示數據;

B.       在OWC中的電子表格類中填充數據的方法。

C.       OWC中顯示數據格式的控制。

1.       電子表格外觀控制:工具欄的顯示、Office圖標的顯示、列標題的顯示、行標題的顯示、水平滾動條的顯示、垂直滾動條的顯示、網格的顯示、網格顏色設置;

2.       單元格水平對齊方式;

3.       單元格垂直對齊方式;

4.       單元格合併;

5.       單元格字體設置:字體、字形、字號、字體顏色、字體加粗、下劃線(多種樣式);

6.       單元格邊框設置;

2.主要模塊

2.1.    Excel

一、Excel嵌入網頁的方法:

       A、將後臺定製好的Excel文件在後臺用流的方式返回給前臺頁面展示,代碼以下

      Response.ClearContent();

        Response.ClearHeaders();

        Response.ContentType = "application/vnd.ms-excel";

        Response.AddHeader("Content-Disposition", "inline;filename='個人文件'");

        Response.WriteFile(FileName);//FileName爲Excel文件所在地址

        Response.Flush();

        Response.Close();

        運行效果:整個頁面都充滿了Excel。

      B、在前臺頁面框架中直接加在,代碼:

      <iframe id="myExcelHtml" src ="Nomarl.xls" width = "600" height ="300" align ="middle"> </iframe>

       運行效果:可隨意控制Excel在頁面的顯示位置。

二、 Excel顯示格式控制。

  A、單元格格式設置,默認爲常規類型;Excel

  代碼:

  Excel.Range r = mySheet.get_Range(mySheet.Cells[1, 1], mySheet.Cells[DT.Rows.Count + 2, DT.Columns.Count - 3]);

  //設置單元格格式爲文本類型,文本類型可設置上下標

  r.NumberFormat = "@";

  //設置單元格格式爲數值類型,小數點後2位

  r.NumberForma = "0.00_ "

  //設置單元格格式爲貨幣類型,小數點後2位

    r.NumberForma = "¥#,##0.00;¥-#,##0.00"

  //設置單元格格式爲會計專用類型,小數點後2位

  r.NumberForma = _"_ ¥* #,##0.00_ ;_ ¥* -#,##0.00_ ;_ ¥* ""-""??_ ;_ @_ "

  //設置單元格格式爲日期類型

  r.NumberForma = "yyyy-m-d"

  //設置單元格格式爲時間類型

  r.NumberForma = "[$-F400]h:mm:ss AM/PM"

  //設置單元格格式爲百分比類型,小數點後2位

  r.NumberForma = "0.00%"

  //設置單元格格式爲分數類型,分母爲一位數

  r.NumberForma = "# ?/?"

  //設置單元格格式爲科學技術類型,小數位數爲2

  r.NumberForma = "0.00E+00"

  //設置單元格格式爲特殊類型

  r.NumberForma = "000000"

  B、上下標格式的控制;

  代碼:

  //控制輸出樣式爲下標

     mySheet.get_Range(mySheet.Cells[i + 3, DT.Columns.Count - 3], mySheet.Cells[i + 3, DT.Columns.Count - 3]).get_Characters(a.Length + 1, b.Length).Font.Subscript = true;

      //控制輸出樣式爲上標

  mySheet.get_Range(mySheet.Cells[i + 3, DT.Columns.Count - 3], mySheet.Cells[i + 3, DT.Columns.Count - 3]).get_Characters(a.Length + b.Length + 1, c.Length).Font.Superscript = true;

  C、單元格水平垂直對齊方式;

  代碼:

  //單元格水平,垂直居中

  r.HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;

  r.VerticalAlignment = Excel.XlVAlign.xlVAlignCenter;

  上面代碼中,枚舉XLHAlign的值還有:

  // 右對齊

  xlHAlignRight,

  // 左對齊.

  xlHAlignLeft,

  // 兩端對齊.

  xlHAlignJustify,

  // 分散對齊(縮進)

  xlHAlignDistributed,

  // 居中對齊

  xlHAlignCenter,

  // 依照數據類型對齊,常規

  xlHAlignGeneral,

  // 填充

  xlHAlignFill,

  // 跨列對齊.

  xlHAlignCenterAcrossSelection = 7,

  枚舉XLVAlign的值還有:

  // 靠上對齊

  xlVAlignTop,

  //兩端對齊.

  xlVAlignJustify = -4130,

  //分散對齊.

  xlVAlignDistributed,

  //居中對齊.

  xlVAlignCenter,

  //靠下對齊.

  xlVAlignBottom = -4107,

D、單元格邊框設置;

  代碼:

  //設置邊框

  Excel.Range r = mySheet.get_Range(mySheet.Cells[1, 1], mySheet.Cells[DT.Rows.Count + 2, DT.Columns.Count - 3]);

  r.Borders.LineStyle = Excel.XlLineStyle.xlContinuous;

  枚舉XlLineStyle中還有下面線形:

  //沒邊框線

  xlLineStyleNone,

  //雙線.

  xlDouble,

  //點狀線.

  xlDot,

  //虛線.

  xlDash,

  //連續線.

  xlContinuous,

  //點線交互型

  xlDashDot,

  //兩點一線型

  xlDashDotDot,

  //斜線.

  xlSlantDashDot,

E、單元格合併

  用get_Range方法獲取要合併的單元格,再設置MergeCells屬性的值進行合併。

  代碼:

  //合併單元格

  myExcel.get_Range(myExcel.Cells[1, 1], myExcel.Cells[1,4]).MergeCells = true;

F、字體設置

  先用get_Range方法選中要設置字體的某個單元格或者或者直接用get_Characters方法直接選中要設置的字符進行設置;

  代碼:

  //加粗字體

  myExcel.get_Range(myExcel.Cells[1, 1], myExcel.Cells[1, 1]).Font.Bold = true;

  //設置字體大小

  myExcel.get_Range(myExcel.Cells[1,1],myExcel.Cells[1,1]).Font.Size = 16;

  //設置字體的顏色

  myExcel.get_Range(myExcel.Cells[1, 1], myExcel.Cells[1, 1]).Font.ColorIndex = 3;

  myExcel.get_Range(myExcel.Cells[1, 1], myExcel.Cells[1, 1]).Interior.set_Color(3);(C#只能用這種寫法)

  //設置字體

  myExcel.get_Range(myExcel.Cells[1, 1], myExcel.Cells[1, 1]).Font.Name = "隸書";

  //設置成斜體

  myExcel.get_Range(myExcel.Cells[1, 1], myExcel.Cells[1, 1]).Font.Italic = true;

  //設置下劃線

  myExcel.get_Range(myExcel.Cells[1, 1], myExcel.Cells[1, 1]).Font.Underline = true;

G、凍結行列

  用get_Range方法獲取單元格,再設置其Freezepanes屬性爲true,就把該單元格右上方的行和列都凍結了,取消凍結將其值設爲false便可。

  //凍結行列

  myExcel.get_Range(myExcel.Cells[3,1],myExcel.Cells[3,1]).Activate();

  myExcel.ActiveWindow.FreezePanes = true;

H、公式輸入欄的隱藏

  //設置是否顯示Excel公式輸入欄,默認爲true

  myExcel.DisplayFormulaBar = false;

I、 列標題與行標題的隱藏

  //設置是否顯示行和列的標題,默認爲true

  myExcel.ActiveWindow.DisplayHeadings = false;

J、網格的隱藏

  //設置是否顯示網格,默認爲true

  myExcel.ActiveWindow.DisplayGridlines = false;

K、  水平、垂直滾動條的隱藏

  //設置是否顯示水平滾動條

  myExcel.ActiveWindow.DisplayHorizontalScrollBar = false;

  //設置是否顯示垂直滾動條

  myExcel.ActiveWindow.DisplayVerticalScrollBar = false;

L、頁的隱藏Sheet

  //設置是否顯示Sheet頁

  myExcel.ActiveWindow.DisplayWorkbookTabs = false;

三、 向Excel中填充數據,並保存爲臨時文件

      代碼:

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

  //打開模板文件

  myExcel.Application.Workbooks.Open(mode.FullName, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing);

  //選中有數據的Cells

  Excel.Workbook myBook = myExcel.Workbooks[1];

  Excel.Worksheet mySheet = (Excel.Worksheet)myBook.Worksheets[1];

  Excel.Range r = mySheet.get_Range(mySheet.Cells[1, 1], mySheet.Cells[DT.Rows.Count + 2, DT.Columns.Count - 3]);

  r.Select();

  //不單獨顯示Excel,最後在IE中顯示

  myExcel.Visible = false;

  //第一行爲報表的標題

  myExcel.Cells[1, 1] = "用模板導出的報表";

  //逐行寫入數據,數組中第一行爲報表的列標題

  for (int i = 0; i < DT.Columns.Count - 3; i++)

  {

    myExcel.Cells[2, 1 + i] = DT.Columns[i].Caption; ;

  }

  //在當前目錄下指定一個臨時文件

  string FileName = Server.MapPath("~") + """Temp.xls";

  if (File.Exists(FileName))

  {

    File.Delete(FileName);

  }

  myExcel.Save(FileName);

  mySheet.Cells.Clear() ;

  //設置不出現保存提示框

  myBook.Saved = true;

      myExcel.Application.Workbooks.Close();

2.2.    OWC組件

一、OWC組建在Web頁面的展示方法:

A、將OWC中Sheet導出爲本地Excel文件,再將導出的文件呈現到Web頁面;

    代碼以下:

        Sheet.Export(FileName, OWC11.SheetExportActionEnum.ssExportActionNone, OWC11.SheetExportFormat.ssExportHTML);//Sheet爲OWC11中SpreadsheetClass類的對象

        Response.ClearContent();

        Response.ClearHeaders();

        Response.ContentType = "application/vnd.ms-excel";

        Response.AddHeader("Content-Disposition", "inline;filename='個人文件'");

        Response.WriteFile(FileName);

        Response.Flush();

    Response.Close();

B、後臺把配置好的Sheet直接以文件方法返回到Web頁面展示;

     代碼以下:

     Response.Clear();

         Response.Buffer = true;

         Response.ContentEncoding = System.Text.Encoding.Default;

         //Response.Charset = "utf-8";

         Response.ContentType = "application/vnd.ms-excel";

         Response.Write(Sheet.HTMLData);

         this.EnableViewState = false;

         Response.End();

C、用html標籤將OWC展示在Web頁面,加載後臺程序導出到本地的文件(xml、html、csv格式)來顯示數據;

  代碼以下:

  <object classid="clsid:0002E559-0000-0000-C000-000000000046" width="600" id="Spreadsheet1" height="200">

                  <param name="DataType" value="HTMLURL"/>

                  <param name="HTMLURL" value="<%=FileName%>"/>

  </object>

二、爲OWC中的SpreadSheet類中填充數據的方法:

     獲取Sheet的Cell或者ActiveCell,直接給裏面填充數據,代碼以下:

  OWC11.SpreadsheetClass Sheet = new OWC11.SpreadsheetClass();

  //第一行爲報表的標題

  Sheet.ActiveCell[1, 1] = "用模板導出的報表";

  //逐行寫入數據,數組中第一行爲報表的列標題

  for (int i = 0; i < DT.Columns.Count - 3; i++)

  {

    Sheet.Cells[2, 1 + i] = DT.Columns[i].Caption; ;

  }

  //爲報表填充數據並設置顯示上下標格式

  for (int i = 0; i < DT.Rows.Count; i++)

  {

    for (int j = 0; j < DT.Columns.Count - 4; j++)

    {

      Sheet.ActiveCell[3 + i, 1 + j] = DT.Rows[i][j];

    }

            string a = DT.Rows[i][DT.Columns.Count - 4].ToString();

            string b = DT.Rows[i][DT.Columns.Count - 3].ToString();

            string c = DT.Rows[i][DT.Columns.Count - 2].ToString();

            Sheet.ActiveCell[3 + i,DT.Columns.Count - 3] = a + b + c;

            Sheet.Columns.AutoFit();

  }

三、OWC中數據顯示格式的控制:

A、 電子表格外觀控制:

    是否顯示工具欄默認值爲 true

        Sheet.DisplayToolbar = false;

        取消顯示Office圖標

        Sheet.DisplayOfficeLogo = false;

        是否顯示列標題,默認是true

        Sheet.DisplayColumnHeadings = false;

        是否顯示行標題,默認是true

        Sheet.DisplayRowHeadings = false;

        是否顯示水平滾動條,默認爲true

        Sheet.DisplayHorizontalScrollBar = false;

        是否顯示垂直滾動條,默認爲true

        Sheet.DisplayVerticalScrollBar = false;

        電子表格是否顯示網格,默認爲true

        Sheet.DisplayGridlines = false;

        設置行的顏色

        for (int i = 1; i < DT.Columns.Count - 2; i += 2)

        {

            Sheet.get_Range(Sheet.Rows.Cells[i, 1], Sheet.Rows.Cells[i, DT.Columns.Count - 3]).Interior.set_ColorIndex(2);

   }

B、 單元格水平對齊:

  用Get_Range方法獲取要設置的單元格,用set_HorizontalAlignment方法設置對齊方式;

  代碼以下:

  //單元格水平居中

  Sheet.get_Range(Sheet.Cells[1, 1], Sheet.Cells[DT.Rows.Count + 2, DT.Columns.Count - 3]).set_HorizontalAlignment(OWC11.XlHAlign.xlHAlignCenter);

  枚舉XLHAlign的值分別是:

  //右對齊

  xlHAlignRight,

  //左對齊:

  xlHAlignLeft,

  //居中對齊:

  xlHAlignCenter,

  //常規

  xlHAlignGeneral1,

  //填充對齊:

  xlHAlignFill

C、 單元格垂直對齊:

  用Get_Range方法獲取要設置的單元格,用set_VerticalAlignment方法設置對齊方式;

  代碼以下:

  //單元格垂直居中

  Sheet.get_Range(Sheet.Cells[1, 1], Sheet.Cells[DT.Rows.Count + 2, DT.Columns.Count - 3]).set_VerticalAlignment(OWC11.XlVAlign.xlVAlignCenter);

  枚舉XLHAlign的值分別是:

     // 靠上對齊

  xlVAlignTop,

  // 居中對齊

  xlVAlignCenter,

  // 靠下對齊

      xlVAlignBottom

D、 單元格合併:

  用get_Range方法先獲取要合併的單元格,再用set_MergeCells方法進行合併。

  代碼以下:

  //標題行合併單元格

  Sheet.get_Range(Sheet.Cells[1, 1], Sheet.Cells[1, DT.Columns.Count - 3]).set_MergeCells(true);

E、 字體設置:

  用get_Range方法先獲取要合併的單元格,設置該單元格字體:字體、字形、字號、字體顏色、字體加粗、帶下劃線(下劃線有多種樣式)等。

  代碼以下:

  //標題行加粗字體

  Sheet.get_Range(Sheet.Cells[1, 1], Sheet.Cells[1, 1]).Font.set_Bold(true);

  //設置字體大小  

  Sheet.get_Range(Sheet.Cells[1, 1], Sheet.Cells[1, 1]).Font.set_Size(16);

  //設置字體顏色

  Sheet.get_Range(Sheet.Cells[1, 1], Sheet.Cells[1, 1]).Font.set_ColorIndex(3);

  //設置字體

  Sheet.get_Range(Sheet.Cells[1, 1], Sheet.Cells[1, 1]).Font.set_Name("隸書");

  //設置字體爲斜體

  Sheet.get_Range(Sheet.Cells[1, 1], Sheet.Cells[1, 1]).Font.set_Italic(true);

  //設置字體下劃線

  Sheet.get_Range(Sheet.Cells[1, 1], Sheet.Cells[1, 1]).Font.set_Underline(OWC11.XlUnderlineStyle.xlUnderlineStyleDouble);

  枚舉XLUnderlineStyle的值分別爲:

  xlUnderlineStyleNone,

  xlUnderlineStyleDouble,

  xlUnderlineStyleSingle,

  xlUnderlineStyleSingleAccounting,

  xlUnderlineStyleDoubleAccounting,

F、 添加邊框:

  用get_Range方法先獲取要添加邊框的單元格,用Borders.set_LineStyle方法設置邊框的類型便可。

      代碼以下:

  //畫邊線

  Sheet.get_Range(Sheet.Cells[1, 1], Sheet.Cells[DT.Rows.Count + 2, DT.Columns.Count - 3]).Borders.set_LineStyle(OWC11.XlLineStyle.xlContinuous);

  邊框類型有一下幾種:

  xlLineStyleNone,

  xlDot,

  xlDash,

  xlContinuous,

  xlDashDot,

  xlDashDotDot

3.限制條件說明

3.1. Excel

服務端須要安裝Microsoft Office Excel 2003,Microsoft Office Excel 2003 SP1和Visual Studio 2005 Tools for Office Runtime(vstor.exe),客戶端須要安裝Microsoft Office Excel 2003,Microsoft Internet Explorer 5.01 (Service Pack 2) 或更高版本。

3.2. OWC

服務端和客戶端都必須安裝 Microsoft Office Web Components,它可隨 Office 2003 一塊兒安裝,或者,若是用戶的公司具備 Office 2003 站點許可證,則能夠經過公司的 Intranet 下載 Office Web 組件,用戶還必須使用 Microsoft Internet Explorer 5.01 (Service Pack 2) 或更高版本。

4.結果分析

4.1.Excel

Excel是一款功能強大、操做方便的電子表格處理軟件,使用Excel作報表能夠知足咱們報表的全部需求,包括:表格的樣式、尺寸、顏色的設置;字體樣式、顏色、大小、對齊方式、上下標的設置;表頭設置、表頭凍結、單元格合併;數據統計;打印等。另外在程序實現上還有一下優勢:

一、使用VBA簡化程序設計過程。VBA應用程序是「寄生於」Excel應用程序上的,所以,Excel的一些基本功能和函數等均可以在VBA中直接使用。

二、能夠充分利用Excel中的宏。Excel中的宏錄製器容許記錄一系列的操做,而且將這些操做轉換爲VBA代碼,所以,一方面能夠利用宏錄製器來創建應用程序的基礎,另外一方面,在不能肯定如何編寫一系列的步驟時,能夠進行錄製,再查看代碼。

三、與數據庫交互。Excel可以使用多種類型的數據庫,可以對數據庫中的數據進行訪問,一樣也可以將Excel分析的結構導入到數據庫中。

但同時,用Excel作報表也有一些不足,因爲IE安全策略,當網站嘗試下載除圖片、音樂、純文本文件之外其餘格式文件時,IE將彈出一條「文件下載」的安全警告,由於要下載的文件上可能包含計算機代碼(多是程序或計算機病毒),這樣咱們在IE上展示Excel報表時,會出現以下圖提示,美中不足。
  

 

解決方案:

一、 將Excel封裝在ActiveX裏面,這樣能夠避免每次打開系統甚至每次刷新頁面的時候彈出「文件下載」的對話框,可是在第一次打開的時候須要下載安裝ActiveX。

二、 在客戶端機器上進行設置:打開「個人電腦」à「工具」(菜單)à「文件類型」(屬性頁),在「已註冊的文件類型」中選擇「擴展名」爲「XLS」,「文件類型」爲「Microsoft Excel 工做表」,點擊「高級」按鈕後,以下圖:

 

在「編輯文件類型」對話框中,「下載後確認打開」複選框不被選中表示直接打開,被選中表示彈出對話框,去掉勾點擊肯定。這樣設置會影響客戶端機器電子郵件.XLS格式附件的下載。

4.2.  OWC

OWC是Office Web Compents的縮寫,即Microsoft的Office Web組件,包含SpreadSheet組件、Chart組件、PioTable組件和Data Source組件。咱們報表使用的是SpreadSheet組件,使用它能夠友好、方便的將電子表格展示在web頁面,它一樣能夠知足咱們一下需求:表格的樣式、尺寸、背景顏色的設置;字體樣式、顏色、大小、對齊方式的設置;表頭設置、表頭凍結、單元格合併;數據的統計;打印等。

在程序實現上OWC和Excel是相通的,程序設計過程也簡單,能夠直接調用Excel的方法,在不肯定代碼如何實現時也能夠錄製宏,查看代碼。

缺點是無法實現上下標數據的顯示,既是將帶有上下標格式數據的Excel導入OWC的電子表格,上下標格式也失效,此問題暫沒找到解決方法。 

 

附:

Excel Interior.ColorIndex  顏色色彩列表

 

相關文章
相關標籤/搜索