1.首先需要引入Excel的Com组件,Microsoft Excel 11.0 Object Library 1.5(该组件版本为office2003)
添加该引用后在解决方案的引用文件夹里会有Excel和Microsoft.Office.Core两个引用。
2.我们要对Excel文档进行操作首先需要对Excel文档的结构有一个了解。一个Excel文档包含若干个sheet,每个sheet里又有若干个单元格。也就是说Excel文档是一个三层结构的实体:book文档对象àsheet对象à单元格对象。
在C#里相应的提供了这三个对象的操作类
ApplicationClass==Excel操作对象
ApplicationClass ExcelApp = null;定义了一个Excel操作对象,与具体文档无关
_Workbook == book对象
_Workbook wBook = null;定义了一个book对象
_Workbook sheet = null;定义了一个sheet对象
Microsoft.Office.Interop.Excel.Range == 单元格对象(Renge提供了一组对单元格的操作接口)
Microsoft.Office.Interop.Excel.Range rangeSheet = null;定义了一个单元格操作对象。
明白了Excel的结构和C#中提供的对应的操作类或接口,对我们理解用程序实现Excel的各种操作很有帮助。至少当需要在Excel的哪个级别上操作时,你知道该在哪个类里去找相应的方法。
3.C#对Excel文档操作的函数及功能
ExcelApp = new ApplicationClass();实例化一个Excel操作对象
ExcelApp.Visible = false;让其不可见(一般在写的时候设置这个属性,写完后更改为true就可以展现在用户面前)
wBook = ExcelApp.Workbooks._Open(modelPath, Type.Missing, Type.Missing, Type.Missing,Type.Missing,Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,Type.Missing, Type.Missing, Type.Missing);用Excel操作对象去打开一个Excel文档实体(wBook)这里主要一个参数就是modelPath表示文档所在路径
_Workbook sheet1 = (Worksheet)wBook.Sheets[1];获得wBook里的第一个sheet
rangeSheet=sheet1.get_Range(sheet1.Cells[rowIndex,colIndex],sheet1.Cells[rowIndex,colIndex]);sheet通过调用get_Range函数获得单元格的选定范围,它是对Excel操作最主要的一个对象,因为我们对Excel的操作实际上就是对单元格的操作。所以获得了操作单元格对象就可以实现我们想要的任何操作比如
rangeSheet.Merge(this. rangeSheet.MergeCells);如果不是对一个单元格操作,即单元格的选定的是一个范围,可以用此函数实现合并单元格
rangeSheet.HorizontalAlignment=Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignLeft;设置单元格内容的对齐方式
rangeSheet.Value2通过Value2属性给选定的单元格赋值
rangeSheet.Font.Name = "宋体";字体的设置
rangeSheet.Font.Size = 10;字体大小
rangeSheet.Font.Bold = true;字体加粗
//绘制所选单元格范围内的线条类型,3为虚线,1为实线
RangeSheet.Borders.LineStyle = 3;
//绘制所选单元格范围内上下左右边框为连续的实线
RangeSheet.Borders.get_Item(XlBordersIndex.xlEdgeTop).LineStyle = Microsoft.Office.Interop.Excel.XlLineStyle.xlContinuous;
RangeSheet.Borders.get_Item(XlBordersIndex.xlEdgeBottom).LineStyle = Microsoft.Office.Interop.Excel.XlLineStyle.xlContinuous;
RangeSheet.Borders.get_Item(XlBordersIndex.xlEdgeRight).LineStyle = Microsoft.Office.Interop.Excel.XlLineStyle.xlContinuous;
RangeSheet.Borders.get_Item(XlBordersIndex.xlEdgeLeft).LineStyle = Microsoft.Office.Interop.Excel.XlLineStyle.xlContinuous;
//选定范围内的对齐方式
RangeSheet.HorizontalAlignment = Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignCenter;
以下是网上找到一些关于excel操作的资源可通过链接查看http://www.soaspx.com/dotnet/csharp/csharp_20091125_1762.html
[c-sharp] view plain copy
- using System;
- using System.Collections.Generic;
- using System.Text;
- using System.Windows.Forms;
- // 引入OFFICE EXCEL命名空间
- using Excel = Microsoft.Office.Interop.Excel;
- using System.Reflection;
- using System.Data;
- using System.IO;
- using System.Diagnostics;
- using System.Collections;
- using System.Runtime.InteropServices;
-
- namespace TestLib
- {
- public class ExcelOperation
- {
- private DateTime beforeTime; //Excel启动之前时间
- private DateTime afterTime; //Excel启动之后时间
- Excel.Application myExcel = new Excel.Application();
- Excel.Workbook myBook;
- Excel.Worksheet mySheet1;
- Excel.Range range;
- Excel.Range range1;
- Excel.Range range2;
- Excel.TextBox textBox;
- public int sheetCount = 1; //WorkSheet数量
- private string sheetPrefixName = "页";
-
-
- #region 公共属性
- /// <summary>
- /// WorkSheet前缀名,比如:前缀名为“页”,那么WorkSheet名称依次为“页-1,页-2”
- /// </summary>
- public string SheetPrefixName
- {
- set { this.sheetPrefixName = value; }
- }
-
- /// <summary>
- /// WorkSheet数量
- /// </summary>
- public int WorkSheetCount
- {
- get { return myBook.Sheets.Count; }
- }
-
- #endregion
- public ExcelOperation()
- {
- }
-
- public void InitExcel() //先初始化
- {
- // Excel.Application myExcel = new Excel.Application();
- if (myExcel == null)
- {
- MessageBox.Show("无法创建Excel对象,可能您的电脑未安装Excel!");
-
- }
- MessageBox.Show("初始化成功", "提示");
- myExcel.Quit();
- GC.Collect();
- return;
-
- }
- public void CreateReport( ) //建立文档//此时的Excel表格是一个空的表格,没有任何内容
- {
- // 2.创建文档
- // strTemplate:模板文档全名
- // sheetCount:创建文档所需要的页数
-
- //myExcel.Application.Workbooks.Add(true);//引用工作薄
- myBook = myExcel.Workbooks.Add(Missing.Value);
- mySheet1 = (Excel.Worksheet)myBook.Worksheets[1];
- mySheet1 = (Excel.Worksheet)myExcel.ActiveSheet;// 获取当前工作表
- myExcel.Visible = true;//使Excel可视
- myExcel.DisplayAlerts = true;
- }
- public void SetTitle(/*string TitString*/) //设置报表头
- {
- range = mySheet1.get_Range("A6", "D6");// 获取多个单元格
- range.Merge(Missing.Value); // 合并单元格
- range.Columns.AutoFit(); // 设置列宽为自动适应
- range.NumberFormatLocal = "#,##0.00";// 设置单元格格式为货币格式
-
- 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.Borders[XlBordersIndex.xlEdgeLeft].Weight = XlBorderWeight.xlThick;
- // 设置单元格右边框加粗
- //range.Borders[XlBordersIndex.xlEdgeRight].Weight = XlBorderWeight.xlThick;
- range.Value2 = "合并单元格";
- }
- public void SetContent() //设置内容
- {
- //在命名空间"Excel"中,还定义了一个类"Cell",这个类所代表的就是Excel表格中的一个单元格。通过给"Cell"赋值,从而实现往Excel表格中输入相应的数据
- //Excel.Application excel = new Excel.Application () ;
- //excel.Application.Workbooks.Add(true);
- //excel.Cells[ 5 , 5 ] ="First Row First Column";
- //excel.Cells[ 5 , 6 ] ="First Row Second Column";
- //excel.Cells[ 6 , 5 ] ="Second Row First Column";
- //excel.Cells[ 5 , 5 ] ="Second Row Second Column";
- //excel.Visible = true ;
- range = mySheet1.get_Range("A1", Missing.Value);// 获取单个单元格
- range.Columns.AutoFit();
- 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 = mySheet1.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 = "合并单元格";
- }
- public void PrintSet () //打印设置
- {
- //mySheet1.PageSetup.PaperSize = mySheet1.XLPaperSize.xlPaperA4; // 设置页面大小为A4
- //mySheet1.PageSetup.Orientation = XlPageOrientation.xlPortrait; // 设置垂直版面
- mySheet1.PageSetup.HeaderMargin = 0.0; // 设置页眉边距
- mySheet1.PageSetup.FooterMargin = 0.0; // 设置页脚边距
- mySheet1.PageSetup.LeftMargin = myExcel.InchesToPoints(0.354330708661417); // 设置左边距
- mySheet1.PageSetup.RightMargin = myExcel.InchesToPoints(0.354330708661417);// 设置右边距
- mySheet1.PageSetup.TopMargin = myExcel.InchesToPoints(0.393700787401575); // 设置上边距
- mySheet1.PageSetup.BottomMargin = myExcel.InchesToPoints(0.393700787401575);// 设置下边距
- mySheet1.PageSetup.CenterHorizontally = true; // 设置水平居中
-
- }
- public void InsertPicture() //插入图片
- {
- }
- public void SetColumnWidth() //设置列宽
- {
- }
- public void PastePicture() //粘贴图片
- {
- }
- public void InsertPicture(string RangeName, string PicturePath)
- {
- public void QuitExcel() //退出excle并退出excle就进程
- {
- Excel.Application myExcel = new Excel.Application();
- myExcel.Quit();
- GC.Collect();
- return;
- }
- }
- }