C#操作Excel的类以及其使用举例说明.docx
- 文档编号:7058650
- 上传时间:2023-01-16
- 格式:DOCX
- 页数:19
- 大小:369.40KB
C#操作Excel的类以及其使用举例说明.docx
《C#操作Excel的类以及其使用举例说明.docx》由会员分享,可在线阅读,更多相关《C#操作Excel的类以及其使用举例说明.docx(19页珍藏版)》请在冰豆网上搜索。
C#操作Excel的类以及其使用举例说明
C#操作Excel的类以及其使用举例说明
2010年03月14日星期日21:
09
1前言
这两天由于某种需要,研究了一下.NET中对Excel的互操作,之前主要是直接通过第三方的组件等方式来操作的Excel,这次仔细的研究了一下,对常用的Excel操作需求做了一个简单的总结,比如创建Excel,设置单元格样式,合并单元格,导入内存中的DataTable,插入图片、图表等。
在此基础上借助于Microsoft.Office.Interop.Excel对这些操作进行了封装最终形成了ExcelHandler类。
本文主要对自己封装的这个类进行简单的举例说明,关于此类的完整代码参见第三部分。
注意:
对于命名空间Microsoft.Office.Interop.Excel,使用之前需要引用COM:
MicrosoftOffice11.0ObjectLibrary(office2003)或者MicrosoftOffice12.0ObjectLibrary(office2007),如果引用列表中没有,需要自行添加X:
ProgramFiles/MicrosoftOffice/OFFICE[11|12]/EXCEL.EXE的引用。
如果已经安装VSTO(VisualStudioToolsForOffice),亦可直接添加对X:
\ProgramFiles\MicrosoftVisualStudio[9.0|8.0]\VisualStudioToolsforOffice\PIA\Office[11|12]\Microsoft.Office.Interop.Excel.dll的引用。
2ExcelHandler类举例说明
为了展示该类的使用方法,新建了一个WinForm的测试项目进行测试,项目名称可自定,添加对ExcelHandler的dll的引用。
所有测试代码均放在窗体的一个按钮单击事件的处理方法中。
2.1创建Excel文件
///
///测试ExcelHandler类
///
///
///
privatevoidbuttonTest_Click(objectsender,EventArgse)
{
stringexcelFilePath=string.Format("{0}Excel-{1}.xls",AppDomain.CurrentDomain.BaseDirectory,DateTime.Now.ToString("yyyyMMddHHmmss"));
using(ExcelHandlerhandler=newExcelHandler(excelFilePath,true))
{
handler.OpenOrCreate();
MessageBox.Show("创建Excel成功!
");
handler.Save();
MessageBox.Show(string.Format("保存Excel成功!
Excel路径:
{0}",excelFilePath));
}
}
点击按钮执行后,可以看到在Debug目录下多了一个Excel文件
此文件的完整路径为:
F:
\MyProjects\Tanging.DataVisualization\Tanging.DataVisualization\bin\Debug\Excel-20100314181502.xls。
注意:
之后的例子的Excel的文件的路径需要为你自己创建的Excel的相应路径。
下面将举例说明对此Excel文件进行操作。
2.2创建自己的工作表Worksheet
privatevoidbuttonTest_Click(objectsender,EventArgse)
{
stringexcelFilePath=string.Format("{0}Excel-20100314181502.xls",AppDomain.CurrentDomain.BaseDirectory);
using(ExcelHandlerhandler=newExcelHandler(excelFilePath,false))//设置第二个参数为false表示直接打开现有的Excel文档
{
handler.OpenOrCreate();
//创建一个Worksheet
Worksheetsheet=handler.AddWorksheet("TestSheet");
//删除除TestSheet之外的其余Worksheet
handler.DeleteWorksheetExcept(sheet);
handler.Save();
}
}
再次打开创建的Excel,可以看到新建的Worksheet
2.3单元格、Range等的操作
下面设置A1到E5的单元格样式,并且设置单元格值等
privatevoidbuttonTest_Click(objectsender,EventArgse)
{
stringexcelFilePath=string.Format("{0}Excel-20100314181502.xls",AppDomain.CurrentDomain.BaseDirectory);
using(ExcelHandlerhandler=newExcelHandler(excelFilePath,false))//设置第二个参数为false表示直接打开现有的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导入DataTable
代码如下:
privatevoidbuttonTest_Click(objectsender,EventArgse)
{
stringexcelFilePath=string.Format("{0}Excel-20100314181502.xls",AppDomain.CurrentDomain.BaseDirectory);
using(ExcelHandlerhandler=newExcelHandler(excelFilePath,false))//设置第二个参数为false表示直接打开现有的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行第一列导入数据
handler.ImportDataTable(sheet,"测试导入表格",true,newstring[]{"测试列1","测试列2","测试列3"},6,1,table);
handler.Save();
}
}
结果如下图:
2.5插入图片
下面插入一张图片到Excel的第一行第五列,代码如下:
privatevoidbuttonTest_Click(objectsender,EventArgse)
{
stringexcelFilePath=string.Format("{0}Excel-20100314181502.xls",AppDomain.CurrentDomain.BaseDirectory);
using(ExcelHandlerhandler=newExcelHandler(excelFilePath,false))//设置第二个参数为false表示直接打开现有的Excel文档
{
handler.OpenOrCreate();
//获得Worksheet对象
Worksheetsheet=handler.GetWorksheet("TestSheet");
//图片地址
stringfilePath=string.Format("{0}test.png",AppDomain.CurrentDomain.BaseDirectory);
//从第1行第5列插入图片
Picturepic=handler.AddImage(sheet,filePath,1,5);
handler.Save();
}
}
效果如下图:
3ExcelHandler类完整源码
/************************************************
*Author:
RaymondTang
*Email:
china.raymond@
*Blog:
*CreatedTime:
2010-3-149:
59:
43
*Class:
Tanging.Interop.Excel.ExcelHandler
************************************************/
usingSystem;
usingSystem.IO;
usingSystem.Reflection;
usingSystem.Text;
usingXls=Microsoft.Office.Interop.Excel;
usingSystem.Data;
usingSystem.Collections.Generic;
usingSystem.Runtime.InteropServices;
namespaceTanging.Interop.Excel
{
///
///Excel处理类
///
///
publicsealedclassExcelHandler:
IDisposable
{
#region[构造函数]
///
///ExcelHandler的构造函数
///
///
publicExcelHandler(stringfileName)
:
this(fileName,false)
{
}
///
///创建ExcelHandler对象,指定文件名以及是否创建新的Excel文件
///
///
///
publicExcelHandler(stringfileName,boolcreateNew)
{
this.FileName=fileName;
this.mCreateNew=createNew;
}
#endregion
#region[字段和属性]
privatestaticreadonlyobjectmissing=Missing.Value;
privatestringmFileName;
///
///Excel文件名
///
publicstringFileName
{
get{returnmFileName;}
set{mFileName=value;}
}
///
///是否新建Excel文件
///
privateboolmCreateNew;
privateXls.ApplicationmApp;
///
///当前Excel应用程序
///
publicXls.ApplicationApp
{
get{returnmApp;}
set{mApp=value;}
}
privateXls.WorkbooksmAllWorkbooks;
///
///当前Excel应用程序所打开的所有Excel工作簿
///
publicXls.WorkbooksAllWorkbooks
{
get{returnmAllWorkbooks;}
set{mAllWorkbooks=value;}
}
privateXls.WorkbookmCurrentWorkbook;
///
///当前Excel工作簿
///
publicXls.WorkbookCurrentWorkbook
{
get{returnmCurrentWorkbook;}
set{mCurrentWorkbook=value;}
}
privateXls.WorksheetsmAllWorksheets;
///
///当前Excel工作簿内的所有Sheet
///
publicXls.WorksheetsAllWorksheets
{
get{returnmAllWorksheets;}
set{mAllWorksheets=value;}
}
privateXls.WorksheetmCurrentWorksheet;
///
///当前Excel中激活的Sheet
///
publicXls.WorksheetCurrentWorksheet
{
get{returnmCurrentWorksheet;}
set{mCurrentWorksheet=value;}
}
#endregion
#region[初始化操作,打开或者创建文件]
///
///初始化,如果不创建新文件直接打开,否则创建新文件
///
publicvoidOpenOrCreate()
{
this.App=newXls.ApplicationClass();
this.AllWorkbooks=this.App.Workbooks;
if(!
this.mCreateNew)//直接打开
{
if(!
File.Exists(this.FileName))
{
thrownewFileNotFoundException("找不到指定的Excel文件,请检查路径是否正确!
",this.FileName);
}
this.CurrentWorkbook=this.AllWorkbooks.Open(this.FileName,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//创建新文件
{
if(File.Exists(this.FileName))
{
File.Delete(this.FileName);
}
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
#region[ExcelSheet相关操作等]
///
///根据工作表名获取Excel工作表对象的引用
///
///
///
publicXls.WorksheetGetWorksheet(stringsheetName)
{
returnthis.CurrentWorkbook.Sheets[sheetName]asXls.Worksheet;
}
///
///根据工作表索引获取Excel工作表对象的引用
///
///
///
publicXls.WorksheetGetWorksheet(intindex)
{
returnthis.CurrentWorkbook.Sheets.get_Item(index)asXls.Worksheet;
}
///
///给当前工作簿添加工作表并返回的方法重载,添加工作表后不使其激活
///
///
///
publicXls.WorksheetAddWorksheet(stringsheetName)
{
returnthis.AddWorksheet(sheetName,false);
}
///
///给当前工作簿添加工作表并返回
///
///
///
///
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;
}
///
///重命名工作表
///
///
///
///
publicXls.WorksheetRenameWorksheet(Xls.Worksheetsheet,stringnewName)
{
sheet.Name=newName;
returnsheet;
}
///
///重命名工作表
///
///
///
///
publicXls.WorksheetRenameWorksheet(stringoldName,stringnewName)
{
Xls.Worksheetsheet=this.GetWorksheet(oldName);
returnthis.RenameWorksheet(sheet,newName);
}
///
///删除工作表
///
///
publicvoidDeleteWorksheet(stringsheetName)
{
if(this.Curren
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C# 操作 Excel 以及 使用 举例说明