C#對EXCEL的讀寫操作

iDotNetSpace發表於2009-01-05

using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Data.OleDb;
using Excel;
using System.Reflection;
using System.Runtime.InteropServices;// For COMException

public partial class readandwrite_excel : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        ReadExcel();
        Response.Write("下面是寫入XLS檔案");
        WriteXls();


        WriteAndAutoSaveXls();
    }
    /**////


    /// 讀取一個XLSW檔案並顯示出來
    ///

    public void ReadExcel()
    {
       string leconn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=e:\\WebCHat\\excel\\test.xls;Extended Properties='Excel 8.0;HDR=NO'";
           //  HDR=NO 即無欄位
           //   HDR=yes 即有欄位,一般預設excel表中第1行的列標題為欄位名,如姓名、年齡等
        //如果您在連線字串中指定 HDR=NO,Jet OLE DB 提供程式將自動為您命名欄位(F1 表示第一個欄位,F2 表示第二個欄位,依此類推);
       // IMEX 表示是否強制轉換為文字
       //   Excel 驅動程式讀取指定源中一定數量的行(預設情況下為 8 行)以推測每列的資料型別。
        //如果推測出列可能包含混合資料型別(尤其是混合了文字資料的數值資料時),
        //驅動程式將決定採用佔多數的資料型別,並對包含其他型別資料的單元返回空值。
        //(如果各種資料型別的數量相當,則採用數值型別。)
        //Excel 工作表中大部分單元格格式設定選項不會影響此資料型別判斷。
        //可以通過指定匯入模式來修改 Excel 驅動程式的此行為。
        //若要指定匯入模式,請在“屬性”視窗中將 IMEX=1 新增到 Excel
        //連線管理器的連線字串內的擴充套件屬性值中。


        OleDbConnection conn = new OleDbConnection(oleconn);
        conn.Open();
        string str_sql = "select * from [Sheet1$]";
        OleDbDataAdapter da = new OleDbDataAdapter(str_sql, conn);
        DataSet ds = new DataSet();
        oda.Fill(ds);
        
        conn.Close();
         GridView1.DataSource = ds;
        GridView1.DataBind();
    }

 

    /**////


    /// 將一些資料寫入到一個XLS檔案中
    ///

  
    public void WriteXls()
    {
        Excel.Application excel = new Excel.Application();
        excel.Workbooks.Add(true);
        excel.Cells[1, 1] = "1,1";
        excel.Cells[1, 2] = "1,2";
        excel.Cells[1, 3] = "1,3";
        excel.Cells[2, 1] = "2,1";
        excel.Cells[2, 2] = "2,2";
        excel.Cells[2, 3] = "2,3";
        excel.Visible = true;

    }
   
     /**////


    /// 實現自動儲存
    ///

    ///參考 http://hi.baidu.com/happybadbaby/blog/item/c396ae231ef5f4549822ed58.html
    public void WriteAndAutoSaveXls()
    {
        Excel.Application excel = new Excel.Application();
        Range range = null;// 建立一個空的單元格物件
        Worksheet sheet = null;
       try
       {
           // 註釋掉的語句是:從磁碟指定位置開啟一個 Excel 檔案
         //excel.Workbooks.Open("demo.xls", 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);
                if(excel==null)
                {
                    Response.Write("不能建立excle檔案");
                }
                 excel.Visible = false;// 不顯示 Excel 檔案,如果為 true 則顯示 Excel 檔案
                 excel.Workbooks.Add(Missing.Value);// 新增工作簿
                     //使用 Missing 類的此例項來表示缺少的值,例如,當您呼叫具有預設引數值的方法時。
              sheet = (Worksheet)excel.ActiveSheet;// 獲取當前工作表

               
                 sheet.get_Range(sheet.Cells[29,2],sheet.Cells[29,2]).Orientation=Excel.XlOrientation.xlVertical;//字型豎直居中在單元格內


                 range = sheet.get_Range("A1", Missing.Value);// 獲取單個單元格
                 range.RowHeight = 20;           // 設定行高
                 range.ColumnWidth = 20;         // 設定列寬
                 range.Borders.LineStyle. = 1;    // 設定單元格邊框
                 range.Font.Bold = true;         // 加粗字型
                 range.Font.Size = 20;           // 設定字型大小
                 range.Font.ColorIndex = 5;      // 設定字型顏色
                 range.Interior.ColorIndex = 6;  // 設定單元格背景色
                 range.HorizontalAlignment = XlHAlign.xlHAlignCenter;// 設定單元格水平居中
                 range.VerticalAlignment = XlVAlign.xlVAlignCenter;// 設定單元格垂直居中
                 range.Value2 = "設定行高和列寬";// 設定單元格的值


                 range = sheet.get_Range("B2", "D4");// 獲取多個單元格
                 range.Merge(Missing.Value);         // 合併單元格
                 range.Columns.AutoFit();            // 設定列寬為自動適應
                 range.NumberFormatLocal = "#,##0.00";// 設定單元格格式為貨幣格式
            // 設定單元格左邊框加粗
                 range.Borders[XlBordersIndex.xlEdgeLeft].Weight = XlBorderWeight.xlThick;
           // 設定單元格右邊框加粗
                 range.Borders[XlBordersIndex.xlEdgeRight].Weight = XlBorderWeight.xlThick;
                 range.Value2 = "合併單元格";

                // 頁面設定
                 sheet.PageSetup.PaperSize = XlPaperSize.xlPaperA4;          // 設定頁面大小為A4
                 sheet.PageSetup.Orientation = XlPageOrientation.xlPortrait; // 設定垂直版面
                 sheet.PageSetup.HeaderMargin = 0.0;                         // 設定頁首邊距
                 sheet.PageSetup.FooterMargin = 0.0;                         // 設定頁尾邊距
                 sheet.PageSetup.LeftMargin = excel.InchesToPoints(0.354330708661417); // 設定左邊距
                 sheet.PageSetup.RightMargin = excel.InchesToPoints(0.354330708661417);// 設定右邊距
                 sheet.PageSetup.TopMargin = excel.InchesToPoints(0.393700787401575);  // 設定上邊距
                 sheet.PageSetup.BottomMargin = excel.InchesToPoints(0.393700787401575);// 設定下邊距
                 sheet.PageSetup.CenterHorizontally = true;                  // 設定水平居中

                // 列印檔案
                 sheet.PrintOut(Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);
                
                // 儲存檔案到程式執行目錄下
                 sheet.SaveAs("e:\\WebChat\\excel\\demo.xls", Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);
                 excel.ActiveWorkbook.Close(false, null, null); // 關閉 Excel 檔案且不儲存
             }
            catch (Exception ex)
         {
             Response.Write(ex.Message);
             }
            finally
           {
                 excel.Quit(); // 退出 Excel
                 System.Runtime.InteropServices.Marshal.ReleaseComObject(range);
                 System.Runtime.InteropServices.Marshal.ReleaseComObject(sheet);
                 System.Runtime.InteropServices.Marshal.ReleaseComObject(excel);
                 GC.Collect();
         

               
             }
         }
     }

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-526836/,如需轉載,請註明出處,否則將追究法律責任。

相關文章