Excel对象介绍.doc_第1页
Excel对象介绍.doc_第2页
Excel对象介绍.doc_第3页
Excel对象介绍.doc_第4页
Excel对象介绍.doc_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Excel对象用法的介绍 Excel是微软公司办公自动化套件中的一个软件,他主要是用来处理电子表格。Excel以其功能强大,界面友好等受到了许多用户的欢迎。在设计应用系统时,对于不同的用户,他们对于打印的需求是不一样的,如果要使得程序中的打印功能适用于每一个用户,可以想象程序设计是十分复杂的。由于Excel表格的功能强大,又由于几乎每一台机器都安装了它,如果把程序处理的结果放到Excel表格中,这样每一个用户就可以根据自己的需要在Excel中定制自己的打印。这样不仅使得程序设计简单,而且又满足了诸多用户的要求,更加实用了。那么用Visual C如何调用Excel,如何又把数据存放到Excel表格中?本文就来探讨上述问题的解决办法。 Excel对象微软的Excel对象模型包括了128个不同的对象,从矩形,文本框等简单的对象到透视表,图表等复杂的对象下面我们简单介绍一下其中最重要,也是用得最多的四个对象。(1) Application对象。Application对象处于Excel对象层次结构的顶层,表示Excel自身的运行环境。(2) Workbook对象。Workbook对象直接地处于Application对象的下层,表示一个Excel工作薄文件。(3) Worksheet对象。Worksheet对象包含于Workbook对象,表示一个Excel工作表。(4) Range对象。Range对象包含于Worksheet对象,表示Excel工作表中的一个或多个单元格。C#中的受管代码和非受管代码在.NET公用语言框架内运行的程序为受管代码。受管代码在程序中所有类型都受到严格检查,没有指针,对内存的管理完全由运行系统控制。受控状态下,编写程序更为容易,且更少出错,我们可以花更多的时间在解决实际问题上而不是在计算机语言问题上。相对而言,那些在.NET框架外运行的程序为非受管代码。比如:COM组件、ActiveX组件、Win32 API函数、指针运算等。C#编程中在某些特定情况下,需要运用非受管代码,例如,要利用一个成熟的COM组件,或者调用一个API函数,或者用指针去编写实时/高效程序等。Visual C#中调用Excel的COM组件 一个.NET组件事实上是一个.NET下的DLL,它包含的不仅是运行程序本身,更重要的是包含这个DLL的描述信息(Meta Data,即元数据),而一个COM组件是用其类库(TLB)储存其描述信息。这些COM组件都是非受管代码,要在Visual C中使用这些非受管代码的COM组件,就必须把他们转换成受管代码的.NET组件。所以在用Visual C调用Excel表格之前,必须完成从COM组件的非受管代码到受管代码的类库的转换。1、将Excel的COM组件转换为.NET组件在项目中打开Add Reference对话框,选择COM栏,之后在COM列表中找到Microsoft Excel 9.0 Object Library(Office 2000),然后将其加入到项目的References中即可。Visual C#.NET会自动产生相应的.NET组件文件,以后即可正常使用。这个转换形成.NET组件不能单独使用,它不过是以前的COM组件的一个外层包装,在.NET中可以通过这个外层包装去发现原来的COM组件并调用其相应的界面函数。所以它必须与原来的COM组件一起起作用。2、Visual C打开Excel表格事实上,在C#中使用一个经转换的COM组件和使用任何一个其它.NET组件完全一样。可以用new关键字创建一个经转换的COM组件,然后再像使用任何一个其它C#对象一样使用这个组件对象。在转换后的.NET组件中定义了一个命名空间Excel,在此命名空间中封装了一个类Application,这个类和启动Excel表格有非常重要的关系,在Visual C中,只需要下列三行代码就可以完成打开Excel表格的工作,具体如下:Excel.Application excel = new Excel.Application ();/引用Excel对象excel.Application.Workbooks.Add ( true );/引用Excel工作簿excel.Visible = true ;/使Excel可视但此时的Excel表格是一个空的表格,没有任何内容,下面就来介绍如何往Excel表格中输入数据。3、往Excel表格中输入数据在命名空间Excel中,还定义了一个类Cell,这个类所代表的就是Excel表格中的一个单元格。通过给Cell赋值,从而实现往Excel表格中输入相应的数据,下列代码功能是打开Excel表格,并且往表格输入一些数据。Excel.Application excel = new Excel.Application () ;excel.Application.Workbooks.Add ( true ) ;excel.Cells 1 , 1 = First Row First Column ;excel.Cells 1 , 2 = First Row Second Column ;excel.Cells 2 , 1 = Second Row First Column ;excel.Cells 2 , 2 = Second Row Second Column ;excel.Visible = true ;4、实例下面实例在C#中连接Oracle数据库(Name),从表(TableName)中读取数据,并写入Excel。string cnString=Provider=msdaora.1;Data source=Name; ;cnString=cnString+user id=UserName;password=Password;tryOleDbConnection cn=new OleDbConnection (cnString);cn.Open ();trystring s=select * from Name.TableName;OleDbCommand cmd=new OleDbCommand (s,cn);OleDbDataReader dr=cmd.ExecuteReader ();Excel.Application xlApp = new Excel.Application();if(xlApp=null)MessageBox.Show (Cant open Excel!);return;xlApp.Application .Workbooks .Add (true);int row=2,fieldcount;fieldcount=dr.FieldCount ;for(int col=0;colfieldcount;col+) xlApp.Cells 1,col+1=dr.GetName(col);while (dr.Read ()for(int col=0;colCOM-Microsoft Word 11.0 Object Library 2、在.cs文件中添加using Word;下面的例子中包括C#对Word文档的创建、插入表格、设置样式等操作:(例子中代码有些涉及数据信息部分被省略,重要是介绍一些C#操作word文档的方法) public string CreateWordFile(string CheckedInfo) . string message = ; try . Object Nothing = System.Reflection.Missing.Value; Directory.CreateDirectory(C:/CNSI); /创建文件所在目录 string name = CNSI_ + DateTime.Now.ToShortString()+.doc; object filename = C:/CNSI/ + name; /文件保存路径 /创建Word文档 Word.Application WordApp = new Word.ApplicationClass(); Word.Document WordDoc = WordApp.Documents.Add(ref Nothing, ref Nothing, ref Nothing, ref Nothing); /添加页眉 WordApp.ActiveWindow.View.Type = WdViewType.wdOutlineView; WordApp.ActiveWindow.View.SeekView = WdSeekView.wdSeekPrimaryHeader; WordApp.ActiveWindow.ActivePane.Selection.InsertAfter(页眉内容); WordApp.Selection.ParagraphFormat.Alignment = Word.WdParagraphAlignment.wdAlignParagraphRight;/设置右对齐 WordApp.ActiveWindow.View.SeekView = WdSeekView.wdSeekMainDocument;/跳出页眉设置 WordApp.Selection.ParagraphFormat.LineSpacing = 15f;/设置文档的行间距 /移动焦点并换行 object count = 14; object WdLine = Word.WdUnits.wdLine;/换一行; WordApp.Selection.MoveDown(ref WdLine, ref count, ref Nothing);/移动焦点 WordApp.Selection.TypeParagraph();/插入段落 /文档中创建表格 Word.Table newTable = WordDoc.Tables.Add(WordApp.Selection.Range, 12, 3, ref Nothing, ref Nothing); /设置表格样式 newTable.Borders.OutsideLineStyle = Word.WdLineStyle.wdLineStyleThickThinLargeGap; newTable.Borders.InsideLineStyle = Word.WdLineStyle.wdLineStyleSingle; newTable.Columns1.Width = 100f; newTable.Columns2.Width = 220f; newTable.Columns3.Width = 105f; /填充表格内容 newTable.Cell(1, 1).Range.Text = 产品详细信息表; newTable.Cell(1, 1).Range.Bold = 2;/设置单元格中字体为粗体 /合并单元格 newTable.Cell(1, 1).Merge(newTable.Cell(1, 3); WordApp.Selection.Cells.VerticalAlignment = Word.WdCellVerticalAlignment.wdCellAlignVerticalCenter;/垂直居中 WordApp.Selection.ParagraphFormat.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter;/水平居中 /填充表格内容 newTable.Cell(2, 1).Range.Text = 产品基本信息; newTable.Cell(2, 1).Range.Font.Color = Word.WdColor.wdColorDarkBlue;/设置单元格内字体颜色 /合并单元格 newTable.Cell(2, 1).Merge(newTable.Cell(2, 3); WordApp.Selection.Cells.VerticalAlignment = Word.WdCellVerticalAlignment.wdCellAlignVerticalCenter; /填充表格内容 newTable.Cell(3, 1).Range.Text = 品牌名称:; newTable.Cell(3, 2).Range.Text = BrandName; /纵向合并单元格 newTable.Cell(3, 3).Select();/选中一行 object moveUnit = Word.WdUnits.wdLine; object moveCount = 5; object moveExtend = Word.WdMovementType.wdExtend; WordApp.Selection.MoveDown(ref moveUnit, ref moveCount, ref moveExtend); WordApp.Selection.Cells.Merge(); /插入图片 string FileName = Picture;/图片所在路径 object LinkToFile = false; object SaveWithDocument = true; object Anchor = WordDoc.Application.Selection.Range; WordDoc.Application.ActiveDocument.InlineShapes.AddPicture(FileName, ref LinkToFile, ref SaveWithDocument, ref Anchor); WordDoc.Application.ActiveDocument.InlineShapes1.Width = 100f;/图片宽度 WordDoc.Application.ActiveDocument.InlineShapes1.Height = 100f;/图片高度 /将图片设置为四周环绕型 Word.Shape s = WordDoc.Application.ActiveDocument.InlineShapes1.ConvertToShape(); s.WrapFormat.Type = Word.WdWrapType.wdWrapSquare; newTable.Cell(12, 1).Range.Text = 产品特殊属性; newTable.Cell(12, 1).Merge(newTable.Cell(12, 3); /在表格中增加行 WordDoc.Content.Tables1.Rows.Add(ref Nothing); WordDoc.Paragraphs.Last.Range.Text = 文档创建时间: + DateTime.Now.ToString();/“落款” WordDoc.Paragraphs.Last.Alignment = Word.WdParagraphAlignment.wdAlignParagraphRight; /文件保存 WordDoc.SaveAs(ref filename, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing); WordDoc.Close(ref Nothing, ref Nothing, ref Nothing); WordApp.Quit(ref Nothing, ref Nothing, ref Nothing); message=name+文档生成成功,以保存到C:CNSI下; catch . message = 文件导出异常!; return message; 案例3 C#向Excel报表中插入图片的2种方法注意:使用之前需要引用COM:Microsoft Office 11.0 Object Library 如果引用列表中没有,需要自行添加 C:Program FilesMicrosoft OfficeOFFICE11EXCEL.EXE调用方法:MengXianhui.Utility.ExcelReport.InsertPictureToExcel ipt = new MengXianhui.Utility.ExcelReport.InsertPictureToExcel();ipt.Open();ipt.InsertPicture(B2, C:Excellogo.gif);ipt.InsertPicture(B8, C:Excellogo.gif,120,80);ipt.SaveFile(C:ExcelTest.xls);ipt.Dispose(); 简单包装的类:using System;using System.Forms;using Excel = Microsoft.Office.Interop.Excel;namespace MengXianhui.Utility.ExcelReport class InsertPictureToExcel / / 打开没有模板的操作。 / public void Open( ) this.Open(String.Empty); / / 功能:实现Excel应用程序的打开 / / 模板文件物理路径 public void Open( string TemplateFilePath ) /打开对象 m_objExcel = new Excel.Application(); m_objExcel.Visible = false; m_objExcel.DisplayAlerts = false; if (m_objExcel.Version != 11.0) MessageBox.Show(您的 Excel 版本不是 11.0 (Office 2003),操作可能会出现问题。); m_objExcel.Quit(); return; m_objBooks = (Excel.Workbooks)m_objExcel.Workbooks; if (TemplateFilePath.Equals(String.Empty) m_objBook = (Excel._Workbook)(m_objBooks.Add(m_objOpt); else m_objBook = m_objBooks.Open(TemplateFilePath, m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt); m_objSheets = (Excel.Sheets)m_objBook.Worksheets; m_objSheet = (Excel._Worksheet)(m_objSheets.get_Item(1); m_objExcel.WorkbookBeforeClose += new Excel.AppEvents_WorkbookBeforeCloseEventHandler(m_objExcel_WorkbookBeforeClose); private void m_objExcel_WorkbookBeforeClose( Excel.Workbook m_objBooks, ref bool _Cancel ) MessageBox.Show(保存完毕!); / / 将图片插入到指定的单元格位置。 / 注意:图片必须是绝对物理路径 / / 单元格名称,例如:B4 / 要插入图片的绝对路径。 public void InsertPicture( string RangeName, string PicturePath ) m_objRange = m_objSheet.get_Range(RangeName, m_objOpt); m_objRange.Select(); Excel.Pictures pics = (Excel.Pictures)m_objSheet.Pictures(m_objOpt); pics.Insert(PicturePath, m_objOpt); / / 将图片插入到指定的单元格位置,并设置图片的宽度和高度。 / 注意:图片必须是绝对物理路径 / / 单元格名称,例如:B4 / 要插入图片的绝对路径。 / 插入后,图片在Excel中显示的宽度。 / 插入后,图片在Excel中显示的高度。 public void InsertPicture( string RangeName, string PicturePath, float PictuteWidth, float PictureHeight ) m_objRange = m_objSheet.get_Range(RangeName, m_objOpt); m_objRange.Select(); float PicLeft, PicTop; PicLeft = Convert.ToSingle(m_objRange.Left); PicTop = Convert.ToSingle(m_objRange.Top); /参数含义: /图片路径 /是否链接到文件 /图片插入时是否随文档一起保存 /图片在文档中的坐标位置(单位:points) /图片显示的宽度和高度(单位:points) /参数详细信息参见:/zh-cn/library/aa221765(office.11).aspx m_objSheet.Shapes.AddPicture(PicturePath, Microsoft.Office.Core.MsoTriState.msoFalse, Microsoft.Office.Core.MsoTriState.msoTrue, PicLeft, PicTop, PictuteWidth, PictureHeight); / / 将Exc

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论