zoukankan      html  css  js  c++  java
  • C#里面操作Excel 挺复杂的

    前言:
    前几天一同事问我如何利用C#将数据导到Excel文件当中,当时比较忙没有
    顾得上去研究,今天特地研究了一下,基本搞定,下面就具体介绍如何将
    DataView中的数据按照一定格式存到Excel文件当中。
    正文:
    一、首先要引用一个Excel的组件,我一开始是在Office XP下尝试的,不
    成功,后来把XP给干掉,装2k,就成功了,所以这里分享的是Office 2k下
    引用相关组件来实现功能的,在工程中引用COM标签中的Microsoft
    Excel 9.0 Object Library,添加成功后,引用中会多出三个引用项:
    Excel、Office、VBIDE。

     
    引用Excel组件
     
     
    二、具体代码。
    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
    }

    }
  • 相关阅读:
    文件可视化的脚本
    Qt error: invalid application of 'sizeof' to incomplete type 'QStaticAssertFailure<false>'
    libusb(4)在Qt中使用libusb
    USB开发者培训(2)架构、系统、协议和供电
    USB开发者培训(1)技术背景
    你的py文件转换成linux可执行程序
    UOS在启动KVM虚拟机时,发生了如下错误
    远程文件到本地
    linux系统后台运行python脚本
    IEEE Journals, Conferences and Their Abbreviation
  • 原文地址:https://www.cnblogs.com/tuyile006/p/540768.html
Copyright © 2011-2022 走看看