C#操作Excel的类以及其使用举例说明.docx
《C#操作Excel的类以及其使用举例说明.docx》由会员分享,可在线阅读,更多相关《C#操作Excel的类以及其使用举例说明.docx(25页珍藏版)》请在冰豆网上搜索。
![C#操作Excel的类以及其使用举例说明.docx](https://file1.bdocx.com/fileroot1/2023-1/31/4b964642-9508-474b-8ac1-60358de0a090/4b964642-9508-474b-8ac1-60358de0a0901.gif)
C#操作Excel的类以及其使用举例说明
C#操作Excel的类以及其使用举例说明
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的引用。
2、ExcelHandler类举例说明
为了展示该类的使用方法,新建了一个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();
}
}
效果如下图:
3、ExcelHandler类完整源码
usingSystem;
usingSystem.IO;
usingSystem.Reflection;
usingSystem.Text;
usingXls=Microsoft.Office.Interop.Excel;
usingSystem.Data;
usingSystem.Collections.Generic;
usingSystem.Runtime.InteropServices;
namespaceMyPrograme
{
///
///Excel处理类
///
///可以用于创建Excel,操作工作表,设置单元格样式对齐方式等,导入内存、数据库中的数据表,插入图片到Excel等
publicsealedclassExcelHandler:
IDisposable
{
#region构造函数
///
///ExcelHandler的构造函数,
///
publicExcelHandler(stringfileName)
:
this(fileName,false)
{
}
///
///ExcelHandler的构造函数
///
///Excel文件名,绝对路径
publicExcelHandler(stringfileName):
this(fileName,false)
{
}
///
///创建ExcelHandler对象,指定文件名以及是否创建新的Excel文件
///
///Excel文件名,绝对路径
///是否创建新的Excel文件
publicExcelHandler(stringfileName,boolcreateNew)
{
this.FileName=fileName;
this.ifCreateNew=createNew;
}
#endregion
#region字段和属性
privatestaticreadonlyobject_missing=Missing.Value;
privatestring_fileName;
///
///Excel文件名
///
publicstringFileName
{
get{return_fileName;}
set{_fileName=value;}
}
///
///是否新建Excel文件
///
privateboolifCreateNew;
privateXls.Application_app;
///
///当前Excel应用程序
///
publicXls.ApplicationApp
{
get{return_app;}
set{_app=value;}
}
privateXls.Workbooks_allWorkbooks;
///
///当前Excel应用程序所打开的所有Excel工作簿
///
publicXls.WorkbooksAllWorkbooks
{
get{return_allWorkbooks;}
set{_allWorkbooks=value;}
}
privateXls.Workbook_currentWorkbook;
///
///当前Excel工作簿
///
publicXls.WorkbookCurrentWorkbook
{
get{return_currentWorkbook;}
set{_currentWorkbook=value;}
}
privateXls.Worksheets_allWorksheets;
///
///当前Excel工作簿内的所有Sheet
///
publicXls.WorksheetsAllWorksheets
{
get{return_allWorksheets;}
set{_allWorksheets=value;}
}
privateXls.Worksheet_currentWorksheet;
///
///当前Excel中激活的Sheet
///
publicXls.WorksheetCurrentWorksheet
{
get{return_currentWorksheet;}
set{_currentWorksheet=value;}
}
#endregion
#region初始化操作,打开或者创建文件
///
///初始化,如果不创建新文件直接打开,否则创建新文件
///
publicvoidOpenOrCreate()
{
this.App=newXls.ApplicationClass();
this.AllWorkbooks=this.App.Workbooks;
if(!
this.ifCreateNew)//直接打开
{
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
#regionExcelSheet相关操作等
///
///根据工作表名获取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.CurrentWorkbook.Worksheets.Count<=