C#里面操作Excel 挺复杂的

it2022-05-09  31

前言: 前几天一同事问我如何利用C#将数据导到Excel文件当中,当时比较忙没有 顾得上去研究,今天特地研究了一下,基本搞定,下面就具体介绍如何将 DataView中的数据按照一定格式存到Excel文件当中。 正文: 一、首先要引用一个Excel的组件,我一开始是在Office XP下尝试的,不 成功,后来把XP给干掉,装2k,就成功了,所以这里分享的是Office 2k下 引用相关组件来实现功能的,在工程中引用COM标签中的Microsoft Excel 9.0 Object Library,添加成功后,引用中会多出三个引用项: Excel、Office、VBIDE。       二、具体代码。using System;using System.Data;using Excel;using System.IO;namespace Test.ExcelCom{/// <summary>/// 将DataView中的数据导入Excel文件中/// 作者:Rexsp/// 创建:2004-4-4/// </summary>public class OutputExcel{ #region 私有成员 /// <summary> /// 数据的DataView /// </summary> private DataView dv=null; /// <summary> /// 表格标题 /// </summary> private string title=null; /// <summary> /// 输出文件路径 /// </summary> private string outFilePath=null; /// <summary> /// 输入文件名 /// </summary> private string inputFilePath=null; #endregion  #region 公共属性 /// <summary> /// 数据的DataView /// </summary> public DataView DV {  set{dv=value;} } /// <summary> /// 表格标题 /// </summary> public string Title {  set{title=value;}  get{return title;} } /// <summary> /// 输出文件路径 /// </summary> public string OutFilePath {  set{outFilePath=value;}  get{return outFilePath;} } /// <summary> /// 输入文件路径 /// </summary> public string InputFilePath {  set{inputFilePath=value;}  get{return inputFilePath;} } #endregion  #region 构造函数 public OutputExcel() { } public OutputExcel(DataView dv,string title) {  //  // TODO: 在此处添加构造函数逻辑  // } #endregion  #region 公共方法 public void CreateExcel() {  int rowIndex=4;//行起始坐标  int colIndex=1;//列起始坐标   ApplicationClass myApp=null;  Workbook myBook=null;  Worksheet mySheet=null;   //如果文件不存在,则将模板文件拷贝一份作为输出文件  //这里如果通过File.Create来创建文件是不行的,因为xls  //的空文件也有固定的格式,跟文本不一样的,也许有其它  //通过程序直接生成excel的方法,大家可以尝试尝试的  if(!File.Exists(outFilePath))  {   File.Copy(inputFilePath,outFilePath,true);  }   myApp= new ApplicationClass();  myApp.Visible=false;  object oMissiong=System.Reflection.Missing.Value;  myApp.Workbooks.Open(outFilePath,oMissiong,oMissiong,oMissiong,oMissiong, oMissiong,oMissiong,oMissiong,oMissiong,oMissiong,oMissiong,oMissiong,oMissiong);  myBook=myApp.Workbooks[1];  mySheet=(Worksheet)myBook.ActiveSheet;   //  //取得标题  //  foreach(DataColumn col in dv.Table.Columns)  {   colIndex++;   mySheet.Cells[4,colIndex] = col.ColumnName;   mySheet.get_Range(mySheet.Cells[4,colIndex],mySheet.Cells[4,colIndex]).HorizontalAlignment = XlVAlign.xlVAlignCenter; //设置标题格式为居中对齐  }   //  //取得表格中的数据  //  foreach(DataRowView row in dv)  {   rowIndex ++;   colIndex = 1;   foreach(DataColumn col in dv.Table.Columns)   {    colIndex ++;    if(col.DataType == System.Type.GetType("System.DateTime"))    {     mySheet.Cells[rowIndex,colIndex] = (Convert.ToDateTime(row[col.ColumnName].ToString())).ToString("yyyy-MM-dd");     mySheet.get_Range(mySheet.Cells[rowIndex,colIndex],mySheet.Cells[rowIndex,colIndex]).HorizontalAlignment = XlVAlign.xlVAlignCenter;//设置日期型的字段格式为居中对齐    }    else     if(col.DataType == System.Type.GetType("System.String"))    {     mySheet.Cells[rowIndex,colIndex] = "'"+row[col.ColumnName].ToString();     mySheet.get_Range(mySheet.Cells[rowIndex,colIndex],mySheet.Cells[rowIndex,colIndex]).HorizontalAlignment = XlVAlign.xlVAlignCenter;//设置字符型的字段格式为居中对齐    }    else    {     mySheet.Cells[rowIndex,colIndex] = row[col.ColumnName].ToString();    }   }  }  //  //加载一个合计行  //  int rowSum = rowIndex + 1;  int colSum = 2;  mySheet.Cells[rowSum,2] = "合计";  mySheet.get_Range(mySheet.Cells[rowSum,2],mySheet.Cells[rowSum,2]).HorizontalAlignment = XlHAlign.xlHAlignCenter;  //  //设置选中的部分的颜色  //  mySheet.get_Range(mySheet.Cells[rowSum,colSum],mySheet.Cells[rowSum,colIndex]).Select();  mySheet.get_Range(mySheet.Cells[rowSum,colSum],mySheet.Cells[rowSum,colIndex]).Interior.ColorIndex = 19;//设置为浅黄色,共计有56种  //  //取得整个报表的标题  //  mySheet.Cells[2,2] = title;  //  //设置整个报表的标题格式  //  mySheet.get_Range(mySheet.Cells[2,2],mySheet.Cells[2,2]).Font.Bold = true;  mySheet.get_Range(mySheet.Cells[2,2],mySheet.Cells[2,2]).Font.Size = 22;  //  //设置报表表格为最适应宽度  //  mySheet.get_Range(mySheet.Cells[4,2],mySheet.Cells[rowSum,colIndex]).Select();  mySheet.get_Range(mySheet.Cells[4,2],mySheet.Cells[rowSum,colIndex]).Columns.AutoFit();  //  //设置整个报表的标题为跨列居中  //  mySheet.get_Range(mySheet.Cells[2,2],mySheet.Cells[2,colIndex]).Select();  mySheet.get_Range(mySheet.Cells[2,2],mySheet.Cells[2,colIndex]).HorizontalAlignment = XlHAlign.xlHAlignCenterAcrossSelection;  //  //绘制边框  //  mySheet.get_Range(mySheet.Cells[4,2],mySheet.Cells[rowSum,colIndex]).Borders.LineStyle = 1;  mySheet.get_Range(mySheet.Cells[4,2],mySheet.Cells[rowSum,2]).Borders[XlBordersIndex.xlEdgeLeft].Weight = XlBorderWeight.xlThick;//设置左边线加粗  mySheet.get_Range(mySheet.Cells[4,2],mySheet.Cells[4,colIndex]).Borders[XlBordersIndex.xlEdgeTop].Weight = XlBorderWeight.xlThick;//设置上边线加粗  mySheet.get_Range(mySheet.Cells[4,colIndex],mySheet.Cells[rowSum,colIndex]).Borders[XlBordersIndex.xlEdgeRight].Weight = XlBorderWeight.xlThick;//设置右边线加粗  mySheet.get_Range(mySheet.Cells[rowSum,2],mySheet.Cells[rowSum,colIndex]).Borders[XlBordersIndex.xlEdgeBottom].Weight = XlBorderWeight.xlThick;//设置下边线加粗  myBook.Save();;  myBook.Close( true,outFilePath,true);  System.Runtime.InteropServices.Marshal.ReleaseComObject(mySheet);  System.Runtime.InteropServices.Marshal.ReleaseComObject(myBook);  System.Runtime.InteropServices.Marshal.ReleaseComObject(myApp);  GC.Collect();  } #endregion} }

转载于:https://www.cnblogs.com/tuyile006/archive/2006/10/26/540768.html


最新回复(0)