C操作Excel類以及其使用舉例說明_第1頁
C操作Excel類以及其使用舉例說明_第2頁
C操作Excel類以及其使用舉例說明_第3頁
C操作Excel類以及其使用舉例說明_第4頁
C操作Excel類以及其使用舉例說明_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

C操作Excel類以及其使用舉例說明C操作Excel類以及其使用舉例說明/C操作Excel類以及其使用舉例說明C#操作Excel的類以及其使用舉例說明1、前言這兩天由于某種需要,研究了一下.NET中對Excel的互操作,之前主要是直接通過第三方的組件等方式來操作的Excel,這次仔細(xì)的研究了一下,對常用的Excel操作需求做了一個(gè)簡單的總結(jié),比如創(chuàng)建Excel,設(shè)置單元格樣式,合并單元格,導(dǎo)入內(nèi)存中的DataTable,插入圖片、圖表等。在此基礎(chǔ)上借助于Microsoft.Office.Interop.Excel對這些操作進(jìn)行了封裝最終形成了ExcelHandler類。本文主要對自己封裝的這個(gè)類進(jìn)行簡單的舉例說明,關(guān)于此類的完整代碼參見第三部分。

注意:對于命名空間Microsoft.Office.Interop.Excel,使用之前需要引用COM:MicrosoftOffice11.0ObjectLibrary(office2003)或者M(jìn)icrosoftOffice12.0ObjectLibrary(office2007),如果引用列表中沒有,需要自行添加X:ProgramOffice/OFFICE[11|12]/EXCEL.EXE的引用。如果已經(jīng)安裝VSTO(VisualStudioToolsForOffice),亦可直接添加對X:\ProgramFiles\MicrosoftVisualStudio[9.0|8.0]\VisualStudioToolsforOffice\PIA\Office[11|12]\Microsoft.Office.Interop.Excel.dll的引用。2、ExcelHandler類舉例說明為了展示該類的使用方法,新建了一個(gè)WinForm的測試項(xiàng)目進(jìn)行測試,項(xiàng)目名稱可自定,添加對ExcelHandler的dll的引用。所有測試代碼均放在窗體的一個(gè)按鈕單擊事件的處理方法中。2.1創(chuàng)建Excel文件///<summary>

///測試ExcelHandler類

///</summary>

///<paramname="sender"></param>

///<paramname="e"></param>

privatevoidbuttonTest_Click(objectsender,EventArgse)

{

stringexcel=string.Format("{0}Excel-{1}.xls",AppDomain.CurrentDomain.BaseDirectory,DateTime.Now.ToString("yyyyMMddHHmmss"));

using(ExcelHandlerhandler=newExcelHandler(excel,true))

{

handler.OpenOrCreate();

MessageBox.Show("創(chuàng)建Excel成功!");

handler.Save();

MessageBox.Show(string.Format("保存Excel成功!Excel路徑:{0}",excel));

}

}

點(diǎn)擊按鈕執(zhí)行后,可以看到在Debug目錄下多了一個(gè)Excel文件。

此文件的完整路徑為:F:\MyProjects\Tanging.DataVisualization\Tanging.DataVisualization\bin\Debug\Excel-202.xls。

注意:之后的例子的Excel的文件的路徑需要為你自己創(chuàng)建的Excel的相應(yīng)路徑。

下面將舉例說明對此Excel文件進(jìn)行操作。2.2創(chuàng)建自己的工作表WorksheetprivatevoidbuttonTest_Click(objectsender,EventArgse)

{

stringexcel=string.Format("{0}Excel-202.xls",AppDomain.CurrentDomain.BaseDirectory);

using(ExcelHandlerhandler=newExcelHandler(excel,false))//設(shè)置第二個(gè)參數(shù)為false表示直接打開現(xiàn)有的Excel文檔

{

handler.OpenOrCreate();

//創(chuàng)建一個(gè)Worksheet

Worksheetsheet=handler.AddWorksheet("TestSheet");

//刪除除TestSheet之外的其余Worksheet

handler.DeleteWorksheetExcept(sheet);

handler.Save();

}

}

再次打開創(chuàng)建的Excel,可以看到新建的Worksheet

2.3單元格、Range等的操作下面設(shè)置A1到E5的單元格樣式,并且設(shè)置單元格值等

privatevoidbuttonTest_Click(objectsender,EventArgse)

{

stringexcel=string.Format("{0}Excel-202.xls",AppDomain.CurrentDomain.BaseDirectory);

using(ExcelHandlerhandler=newExcelHandler(excel,false))//設(shè)置第二個(gè)參數(shù)為false表示直接打開現(xiàn)有的Excel文檔

{

handler.OpenOrCreate();

//獲得Worksheet對象

Worksheetsheet=handler.GetWorksheet("TestSheet");

//A1-E5

Rangerange=handler.GetRange(sheet,1,1,5,5);

handler.SetRangeFormat(range);

handler.SetCellValue(sheet,1,1,"測試");

handler.SetCellValue(sheet,2,1,"測試2");

range.Font.Bold=true;//加粗

handler.Save();

}

}

效果如下:

2.4導(dǎo)入DataTable代碼如下:

privatevoidbuttonTest_Click(objectsender,EventArgse)

{

stringexcel=string.Format("{0}Excel-202.xls",AppDomain.CurrentDomain.BaseDirectory);

using(ExcelHandlerhandler=newExcelHandler(excel,false))//設(shè)置第二個(gè)參數(shù)為false表示直接打開現(xiàn)有的Excel文檔

{

handler.OpenOrCreate();

//獲得Worksheet對象

Worksheetsheet=handler.GetWorksheet("TestSheet");

//A1-E5

Rangerange=handler.GetRange(sheet,1,1,5,5);

handler.SetRangeFormat(range);

range.Font.Bold=true;

System.Data.DataTabletable=newSystem.Data.DataTable();

table.Columns.AddRange(newDataColumn[]{newDataColumn("測試列1"),newDataColumn("測試列2"),newDataColumn("測試列3")});

Randomrandom=newRandom(20);

for(inti=0;i<10;i++)

{

table.Rows.Add(random.Next(10000),random.Next(10000),random.Next(10000));

}

//從第6行第一列導(dǎo)入數(shù)據(jù)

handler.ImportDataTable(sheet,"測試導(dǎo)入表格",true,newstring[]{"測試列1","測試列2","測試列3"},6,1,table);

handler.Save();

}

}

結(jié)果如下圖:

2.5插入圖片下面插入一張圖片到Excel的第一行第五列,代碼如下:

privatevoidbuttonTest_Click(objectsender,EventArgse)

{

stringexcel=string.Format("{0}Excel-202.xls",AppDomain.CurrentDomain.BaseDirectory);

using(ExcelHandlerhandler=newExcelHandler(excel,false))//設(shè)置第二個(gè)參數(shù)為false表示直接打開現(xiàn)有的Excel文檔

{

handler.OpenOrCreate();

//獲得Worksheet對象

Worksheetsheet=handler.GetWorksheet("TestSheet");

//圖片地址

string=string.Format("{0}test.png",AppDomain.CurrentDomain.BaseDirectory);

//從第1行第5列插入圖片

Picturepic=handler.AddImage(sheet,,1,5);

handler.Save();

}

}

效果如下圖:

3、ExcelHandler類完整源碼usingSystem;usingSystem.IO;usingSystem.Reflection;usingSystem.Text;usingXls=Microsoft.Office.Interop.Excel;usingSystem.Data;usingSystem.Collections.Generic;usingSystem.Runtime.InteropServices;namespaceMyPrograme{///<summary>///Excel處理類///</summary>///<remarks>可以用于創(chuàng)建Excel,操作工作表,設(shè)置單元格樣式對齊方式等,導(dǎo)入內(nèi)存、數(shù)據(jù)庫中的數(shù)據(jù)表,插入圖片到Excel等</remarks>publicsealedclassExcelHandler:IDisposable{#region構(gòu)造函數(shù)///<summary>///ExcelHandler的構(gòu)造函數(shù),///</summary>publicExcelHandler(string):this(,false){}///<summary>///ExcelHandler的構(gòu)造函數(shù)///</summary>///<paramname="">Excel文件名,絕對路徑</param>publicExcelHandler(string):this(,false){}///<summary>///創(chuàng)建ExcelHandler對象,指定文件名以及是否創(chuàng)建新的Excel文件///</summary>///<paramname="">Excel文件名,絕對路徑</param>///<paramname="createNew">是否創(chuàng)建新的Excel文件</param>publicExcelHandler(string,boolcreateNew){this.=;this.ifCreateNew=createNew;}#endregion#region字段和屬性privatestaticreadonlyobject_missing=Missing.Value;privatestring_;///<summary>///Excel文件名///</summary>publicstring{get{return_;}set{_=value;}}///<summary>///是否新建Excel文件///</summary>privateboolifCreateNew;privateXls.Application_app;///<summary>///當(dāng)前Excel應(yīng)用程序///</summary>publicXls.ApplicationApp{get{return_app;}set{_app=value;}}privateXls.Workbooks_allWorkbooks;///<summary>///當(dāng)前Excel應(yīng)用程序所打開的所有Excel工作簿///</summary>publicXls.WorkbooksAllWorkbooks{get{return_allWorkbooks;}set{_allWorkbooks=value;}}privateXls.Workbook_currentWorkbook;///<summary>///當(dāng)前Excel工作簿///</summary>publicXls.WorkbookCurrentWorkbook{get{return_currentWorkbook;}set{_currentWorkbook=value;}}privateXls.Worksheets_allWorksheets;///<summary>///當(dāng)前Excel工作簿內(nèi)的所有Sheet///</summary>publicXls.WorksheetsAllWorksheets{get{return_allWorksheets;}set{_allWorksheets=value;}}privateXls.Worksheet_currentWorksheet;///<summary>///當(dāng)前Excel中激活的Sheet///</summary>publicXls.WorksheetCurrentWorksheet{get{return_currentWorksheet;}set{_currentWorksheet=value;}}#endregion#region初始化操作,打開或者創(chuàng)建文件///<summary>///初始化,如果不創(chuàng)建新文件直接打開,否則創(chuàng)建新文件///</summary>publicvoidOpenOrCreate(){this.App=newXls.ApplicationClass();this.AllWorkbooks=this.App.Workbooks;if(!this.ifCreateNew)//直接打開{if(!(this.)){thrownew("找不到指定的Excel文件,請檢查路徑是否正確!",this.);}this.CurrentWorkbook=this.AllWorkbooks.Open(this.,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Xls.XlPlatform.xlWindows,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing);}else//創(chuàng)建新文件{if((this.)){(this.);}this.CurrentWorkbook=this.AllWorkbooks.Add(Type.Missing);}this.AllWorksheets=this.CurrentWorkbook.WorksheetsasXls.Worksheets;this.CurrentWorksheet=this.CurrentWorkbook.ActiveSheetasXls.Worksheet;this.App.DisplayAlerts=false;this.App.Visible=false;}#endregion#regionExcelSheet相關(guān)操作等///<summary>///根據(jù)工作表名獲取Excel工作表對象的引用///</summary>///<paramname="sheetName"></param>///<returns></returns>publicXls.WorksheetGetWorksheet(stringsheetName){returnthis.CurrentWorkbook.Sheets[sheetName]asXls.Worksheet;}///<summary>///根據(jù)工作表索引獲取Excel工作表對象的引用///</summary>///<paramname="index"></param>///<returns></returns>publicXls.WorksheetGetWorksheet(intindex){returnthis.CurrentWorkbook.Sheets.get_Item(index)asXls.Worksheet;}///<summary>///給當(dāng)前工作簿添加工作表并返回的方法重載,添加工作表后不使其激活///</summary>///<paramname="sheetName"></param>///<returns></returns>publicXls.WorksheetAddWorksheet(stringsheetName){returnthis.AddWorksheet(sheetName,false);}///<summary>///給當(dāng)前工作簿添加工作表并返回///</summary>///<paramname="sheetName">工作表名</param>///<paramname="activated">創(chuàng)建后是否使其激活</param>///<returns></returns>publicXls.WorksheetAddWorksheet(stringsheetName,boolactivated){Xls.Worksheetsheet=this.CurrentWorkbook.Worksheets.Add(Type.Missing,Type.Missing,1,Type.Missing)asXls.Worksheet;sheet.Name=sheetName;if(activated){sheet.Activate();}returnsheet;}///<summary>///重命名工作表///</summary>///<paramname="sheet">工作表對象</param>///<paramname="newName">工作表新名稱</param>///<returns></returns>publicXls.WorksheetRenameWorksheet(Xls.Worksheetsheet,stringnewName){sheet.Name=newName;returnsheet;}///<summary>///重命名工作表///</summary>///<paramname="oldName">原名稱</param>///<paramname="newName">新名稱</param>///<returns></returns>publicXls.WorksheetRenameWorksheet(stringoldName,stringnewName){Xls.Worksheetsheet=this.GetWorksheet(oldName);returnthis.RenameWorksheet(sheet,newName);}///<summary>///刪除工作表///</summary>///<paramname="sheetName">工作表名</param>publicvoidDeleteWorksheet(stringsheetName){if(this.CurrentWorkbook.Worksheets.Count<=1){thrownewInvalidOperationException("工作簿至少需要一個(gè)可視化的工作表!");}this.GetWorksheet(sheetName).Delete();}///<summary>///刪除除參數(shù)sheet指定外的其余工作表///</summary>///<paramname="sheet"></param>publicvoidDeleteWorksheetExcept(Xls.Worksheetsheet){foreach(Xls.Worksheetwsinthis.CurrentWorkbook.Worksheets){if(sheet!=ws){ws.Delete();}}}#endregion#region單元格,Range相關(guān)操作///<summary>///設(shè)置單元格的值///</summary>///<paramname="sheet">工作表</param>///<paramname="rowNumber">單元格行號(hào)</param>///<paramname="columnNumber">單元格列號(hào)</param>///<paramname="value">單元格值</param>publicvoidSetCellValue(Xls.Worksheetsheet,introwNumber,intcolumnNumber,objectvalue){sheet.Cells[rowNumber,columnNumber]=value;}///<summary>///合并單元格///</summary>///<paramname="sheet">工作表</param>///<paramname="rowNumber1">第一個(gè)單元格行號(hào)</param>///<paramname="columnNumber1">第一個(gè)單元格列號(hào)</param>///<paramname="rowNumber2">結(jié)束單元格行號(hào)</param>///<paramname="columnNumber2">結(jié)束單元格列號(hào)</param>publicvoidMergeCells(Xls.Worksheetsheet,introwNumber1,intcolumnNumber1,introwNumber2,intcolumnNumber2){Xls.Rangerange=this.GetRange(sheet,rowNumber1,columnNumber1,rowNumber2,columnNumber2);range.Merge(Type.Missing);}///<summary>///獲取Range對象///</summary>///<paramname="sheet">工作表</param>///<paramname="rowNumber1">第一個(gè)單元格行號(hào)</param>///<paramname="columnNumber1">第一個(gè)單元格列號(hào)</param>///<paramname="rowNumber2">結(jié)束單元格行號(hào)</param>///<paramname="columnNumber2">結(jié)束單元格列號(hào)</param>///<returns></returns>publicXls.RangeGetRange(Xls.Worksheetsheet,introwNumber1,intcolumnNumber1,introwNumber2,intcolumnNumber2){returnsheet.get_Range(sheet.Cells[rowNumber1,columnNumber1],sheet.Cells[rowNumber2,columnNumber2]);}#endregion#region設(shè)置單元格、Range的樣式、對齊方式自動(dòng)換行等///<summary>///自動(dòng)調(diào)整,設(shè)置自動(dòng)換行以及自動(dòng)調(diào)整列寬///</summary>///<paramname="range"></param>publicvoidAutoAdjustment(Xls.Rangerange){range.WrapText=true;range.AutoFit();}///<summary>///設(shè)置Range的單元格樣式///</summary>///<remarks>將各項(xiàng)值設(shè)置為默認(rèn)值</remarks>///<paramname="range"></param>publicvoidSetRangeFormat(Xls.Rangerange){this.SetRangeFormat(range,11,Xls.Constants.xlAutomatic,Xls.Constants.xlColor1,Xls.Constants.xlLeft);}///<summary>///設(shè)置Range的單元格樣式///</summary>///<remarks>將各項(xiàng)值設(shè)置為默認(rèn)值</remarks>///<paramname="sheet"></param>///<paramname="rowNumber1"></param>///<paramname="columnNumber1"></param>///<paramname="rowNumber2"></param>///<paramname="columNumber2"></param>publicvoidSetRangeFormat(Xls.Worksheetsheet,introwNumber1,intcolumnNumber1,introwNumber2,intcolumNumber2){this.SetRangeFormat(sheet,rowNumber1,columnNumber1,rowNumber2,columNumber2,11,Xls.Constants.xlAutomatic);}///<summary>///設(shè)置Range的單元格樣式///</summary>///<paramname="sheet"></param>///<paramname="rowNumber1">第一個(gè)單元格行號(hào)</param>///<paramname="columnNumber1">第一個(gè)單元格列號(hào)</param>///<paramname="rowNumber2">結(jié)束單元格行號(hào)</param>///<paramname="columnNumber2">結(jié)束單元格列號(hào)</param>///<paramname="fontSize"></param>///<paramname="fontName"></param>publicvoidSetRangeFormat(Xls.Worksheetsheet,introwNumber1,intcolumnNumber1,introwNumber2,intcolumNumber2,objectfontSize,objectfontName){this.SetRangeFormat(this.GetRange(sheet,rowNumber1,columnNumber1,rowNumber2,columNumber2),fontSize,fontName,Xls.Constants.xlColor1,Xls.Constants.xlLeft);}///<summary>///設(shè)置Range的單元格樣式///</summary>///<paramname="range">Range對象</param>///<paramname="fontSize">字體大小</param>///<paramname="fontName">字體名稱</param>///<paramname="color">字體顏色</param>///<paramname="horizontalAlignment">水平對齊方式</param>publicvoidSetRangeFormat(Xls.Rangerange,objectfontSize,objectfontName,Xls.Constantscolor,Xls.ConstantshorizontalAlignment){range.Font.Color=color;range.Font.Size=fontSize;range.Font.Name=fontName;range.HorizontalAlignment=horizontalAlignment;}#endregion#region導(dǎo)入內(nèi)存中的DataTable///<summary>///導(dǎo)入內(nèi)存中的數(shù)據(jù)表到Excel中///</summary>///<remarks>直接導(dǎo)入到工作表的最起始部分</remarks>///<paramname="sheet"></param>///<paramname="headerTitle"></param>///<paramname="showTitle"></param>///<paramname="headers"></param>///<paramname="table"></param>publicvoidImportDataTable(Xls.Worksheetsheet,stringheaderTitle,boolshowTitle,object[]headers,DataTabletable){this.ImportDataTable(sheet,headerTitle,showTitle,headers,1,1,table);}///<summary>///導(dǎo)入內(nèi)存中的數(shù)據(jù)表到Excel中///</summary>///<remarks>直接導(dǎo)入到工作表的最起始部分,且不顯示標(biāo)題行</remarks>///<paramname="sheet"></param>///<paramname="headers"></param>///<paramname="table"></param>publicvoidImportDataTable(Xls.Worksheetsheet,object[]headers,DataTabletable){this.ImportDataTable(sheet,null,false,headers,table);}///<summary>///導(dǎo)入內(nèi)存中的數(shù)據(jù)表到Excel中///</summary>///<remarks>標(biāo)題行每一列及DataTable標(biāo)題一致</remarks>///<paramname="sheet"></param>///<paramname="table"></param>publicvoidImportDataTable(Xls.Worksheetsheet,DataTabletable){List<string>headers=newList<string>();foreach(DataColumncolumnintable.Columns){headers.Add(column.Caption);}this.ImportDataTable(sheet,headers.ToArray(),table);}///<summary>///導(dǎo)入內(nèi)存中的數(shù)據(jù)表到Excel中///</summary>///<paramname="sheet">工作表</param>///<paramname="headerTitle">表格標(biāo)題</param>///<paramname="showTitle">是否顯示表格標(biāo)題行</param>///<paramname="headers">表格每一列的標(biāo)題</param>///<paramname="rowNumber">插入表格的起始行號(hào)</param>///<paramname="columnNumber">插入表格的起始列號(hào)</param>///<paramname="table">內(nèi)存中的數(shù)據(jù)表</param>publicvoidImportDataTable(Xls.Worksheetsheet,stringheaderTitle,boolshowTitle,object[]headers,introwNumber,intcolumnNumber,DataTabletable){intcolumns=table.Columns.Count;introws=table.Rows.Count;inttitleRowIndex=rowNumber;intheaderRowIndex=rowNumber;Xls.RangetitleRange=null;if(showTitle){headerRowIndex++;//添加標(biāo)題行,并設(shè)置樣式titleRange=this.GetRange(sheet,rowNumber,columnNumber,rowNumber,columnNumber+columns-1);titleRange.Merge(_missing);this.SetRangeFormat(titleRange,16,Xls.Constants.xlAutomatic,Xls.Constants.xlColor1,Xls.Constants.xlCenter);titleRange.Value2=headerTitle;}//添加表頭intm=0;foreach(objectheaderinheaders){this.SetCellValue(sheet,headerRowIndex,columnNumber+m,header);m++;}//添加每一行的數(shù)據(jù)for(inti=0;i<rows;i++){for(intj=0;j<columns;j++){sheet.Cells[headerRowIndex+i+1,j+columnNumber]=table.Rows[i][j];}}}#endregion#region插入圖片到Excel中的相關(guān)方法///<summary>///插入圖片///</summary>///<paramname="sheet">工作表</param>///<paramname="image">圖片的絕對路徑</param>///<paramname="rowNumber">單元格行號(hào)</param>///<paramname="columnNumber">單元格列號(hào)</param>///<returns></returns>publicXls.PictureAddImage(Xls.Worksheetsheet,stringimage,introwNumber,intcolumnNumber){Xls.Rangerange=this.GetRange(sheet,rowNumber,columnNumber,rowNumber,columnNumber);range.Select();Xls.Picturespics=sheet.Pictures(_missing)asXls.Pictures;Xls.Picturepic=pics.Insert(image,_missing);pic.Left=(double)range.Left;pic.Top=(double)range.Top;returnpic;}///<summary>///插入圖片///</summary>///<paramname="sheet">工作表</param>///<paramname="image">圖片的絕對路徑</param>///<paramname="rowNumber">單元格行號(hào)</param>///<paramname="columnNumber">單元格列號(hào)</param>///<paramname="width">圖片的寬度</param>///<paramname="height">圖片的高度</param>///<returns></returns>publicXls.PictureAddImage(Xls.Worksheetsheet,stringimage,introwNum

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論