C# 操作Excel

 一  访问Excel的方法

         (1)采用OleDB方式

          和采用OleDB访问Access的方法和相似,  连接字符串如下:

         connString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " + fileName + "; Extended Properties=Excel 8.0;";

        (2)采用Office组件

            不同版本的office足见不同,高版本的Office能兼容底版本的组件,而底版本的office不能采用高版本的组件.

组件可以Office安装目录可以找到.Excel 2000的组件为Microsoft Excel 9.0 Object library. Excel 2003组件为

Microsoft Excel 11.0 Object library.

    当想Excel中插入的数据比较简单的数据建议使用OleDB的方式

二 向Excel中插入图片

      采用组件的方式,可以参考下面的函数

/// <summary>
  /// 采用Microsoft Excel lib 11.0 创建Excel表
  /// 并添加数据
  /// </summary>
  /// <param name="fileName">文件名</param>
  /// <param name="picPath">图片路径</param>
  /// <param name="picColumn">图片列</param>
  /// <param name="dataTable">插入数据表</param>
  public void CreateExcelFile(string fileName,string picPath, string picColumn, System.Data.DataTable dataTable)
  {     
   int rowCount,columnCount;
   Excel.Range range;
   string Index;     
   try
   {
    rowCount=dataTable.Rows.Count;
    columnCount=dataTable.Columns.Count;
    Missing miss = Missing.Value; 
    
    //创建Excel对象
    Excel.Application m_objExcel = new Excel.Application(); 
    m_objExcel.Visible = false; 
    Excel.Workbooks m_objBooks = (Excel.Workbooks)m_objExcel.Workbooks;
    Excel.Workbook m_objBook = (Excel.Workbook)(m_objBooks.Add(miss));
   
    //创建Work Sheet
    Excel.Sheets sheets = m_objBook.Worksheets;
    Excel.Worksheet worksheet = (Excel.Worksheet) sheets.get_Item(1);
  
    Excel.Pictures pics=(Excel.Pictures)worksheet.Pictures(Type.Missing);//建立图片集合对象
    for(int i=0;i<rowCount; i++)
    {
     for(int j=0; j<columnCount; j++)
     {
      //添加图片列
      if(dataTable.Columns[j].ColumnName.ToUpper() == picColumn.ToUpper())
      {
       Index=string.Concat(columnName[j],i+1);
       range=worksheet.get_Range(Index,miss);
       //根据dataTable.Rows[i][j]生成图片
     
       pics.Insert(picPath,Type.Missing);//获取图片     
       Excel.Picture pic = (Picture )pics.Item(i+1);//建立图片集合某一图片对象

       //设置单元格的Width,Height
       range.ColumnWidth=pic.Width * 0.1;
       range.RowHeight=pic.Height * 0.4;      
        
       //调整图片的位置
       pic.Left = (double)range.Left + 2;
       pic.Top = (double)range.Top + 2;
       //调整图片的大小
       pic.Width = pic.Width * 0.36;
       pic.Height = pic.Height * 0.36;      

      }
      else
      {
       //添加普通数据列
       Index=string.Concat(columnName[j],i+1);
       range=worksheet.get_Range(Index,miss);           
       range.Value2=dataTable.Rows[i][j].ToString();
      }
     }
    }
    m_objBook.SaveAs(fileName, miss, miss, miss, miss, miss, XlSaveAsAccessMode.xlNoChange, miss, miss,miss, miss, miss);
    m_objBook.Saved = true;
    m_objExcel.UserControl = false;
    m_objBook.Close(false, miss, miss);
    m_objExcel.Quit();   
   }
   catch(COMException e)
   {
    throw new Exception(e.Message,e);
   }
   
   finally
   {
    Process[] process;
    process=Process.GetProcessesByName("Excel");
    foreach(Process p in process)
    { 
     //关闭有当前进程启动的Excel进程
     if(p.Id != Process.GetCurrentProcess().Id && p.MainModule.FileName == Process.GetCurrentProcess().MainModule.FileName)
     {
      p.Kill();
     }
    }
   }
   

  }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值