VS2005[C#] 操作 Excel 全攻略

来源:互联网 发布:.9.png制作工具 mac版 编辑:程序博客网 时间:2024/05/27 20:50
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Text;
  7. using System.Windows.Forms;
  8. using Microsoft.Office.Interop.Excel;
  9. using System.Data.SqlClient;
  10. using System.Data.OleDb;
  11. using System.Reflection;
  12. namespace ExcelPrj
  13. {
  14.     /// <summary>
  15.     /// Excel 系统中的主文件Excel.exe 本身就是 COM 组件,通过在.NET 项目中引用Exel.exe 文件可以实现对Excel 的功能控制
  16.     /// 与COM 组件相互操作是通过使用/"包装类/"(Wrapper Class) 和/"代理/"(Proxy) 的机制实现的.包装类使.NET 程序可以识别COM 组件提供的接口,而代理类则是提供对 COM 接口的访问
  17.     /// </summary>
  18.     public partial class Form1 : Form
  19.     {
  20.         public Form1()
  21.         {
  22.             InitializeComponent();
  23.         }
  24.         private void button3_Click(object sender, EventArgs e)
  25.         {
  26.             ExportTasks(Bind(), dataGridView1);
  27.         }
  28.         //如果 Excel 安装在计算机上,侧导出表格内容到 Excel
  29.         public void ExportTasks(DataSet TasksData, DataGridView TasksGridView)
  30.         {
  31.             // 定义要使用的Excel 组件接口
  32.             // 定义Application 对象,此对象表示整个Excel 程序
  33.             Microsoft.Office.Interop.Excel.Application excelApp = null ;
  34.             // 定义Workbook对象,此对象代表工作薄
  35.             Microsoft.Office.Interop.Excel.Workbook workBook;
  36.             // 定义Worksheet 对象,此对象表示Execel 中的一张工作表
  37.             Microsoft.Office.Interop.Excel.Worksheet ws=null;
  38.             //定义Range对象,此对象代表单元格区域
  39.             Microsoft.Office.Interop.Excel.Range r;
  40.             int row = 1; int cell = 1;
  41.             try
  42.             {
  43.               //初始化 Application 对象 excelApp
  44.                 excelApp = new Microsoft.Office.Interop.Excel.Application();
  45.                 //在工作薄的第一个工作表上创建任务列表
  46.                 workBook = excelApp.Workbooks.Add(XlWBATemplate.xlWBATWorksheet);
  47.                 ws =(Worksheet)workBook.Worksheets[1];
  48.                 // 命名工作表的名称为 /"Task Management/"
  49.                 ws.Name = /"Task Management/";
  50.                 #region 创建表格的列头
  51.                 // 遍历数据表中的所有列
  52.                 foreach (DataGridViewColumn cs in TasksGridView.Columns)
  53.                 {
  54.                     // 假如并不想把主键也显示出来
  55.                     if (cs.HeaderText != /"编号/")
  56.                     {
  57.                         ws.Cells[row, cell] = cs.HeaderText;
  58.                         r = (Range)ws.Cells[row, cell];
  59.                         ws.get_Range(r, r).HorizontalAlignment = Microsoft.Office.Interop.Excel.XlVAlign.xlVAlignCenter;
  60.  
  61.                         //此处用来设置列的样式
  62.                         cell++;
  63.                     }
  64.                 }
  65.  
  66.                 // 创建行,把数据视图记录输出到对应的Excel 单元格
  67.                 for (int i = 2; i < TasksData.Tables[0].Rows.Count; i++)
  68.                 {
  69.                     for (int j = 1; j < TasksData.Tables[0].Columns.Count; j++)
  70.                     {
  71.  
  72.                         ws.Cells[i, j] = TasksData.Tables[0].Rows[i][j].ToString();
  73.                       // r = (Range)ws.Cells[i,j];
  74.                         Range rg = (Range)ws.get_Range(ws.Cells[i, j], ws.Cells[i, j]);
  75.                         rg.EntireColumn.ColumnWidth = 20;
  76.                   //    rg.Columns.AutoFit();
  77.                         rg.NumberFormatLocal = /"@/";
  78.                     }
  79.                 }
  80.                 #endregion
  81.             }
  82.             catch (Exception ex)
  83.             {
  84.                 MessageBox.Show(ex.ToString());
  85.             }
  86.  
  87.             //显示 Excel
  88.             excelApp.Visible = true;         
  89.  
  90.         }
  91.         private void button5_Click(object sender, EventArgs e)
  92.         {
  93.             DataSet ds = Bind();
  94.             dataGridView1.DataSource = ds.Tables[0];
  95.         }
  96.         private DataSet Bind()
  97.         {
  98.             SqlConnection conn = new SqlConnection(/"Server=.;Database=testManage;Integrated Security=SSPI/");
  99.             SqlDataAdapter da = new SqlDataAdapter(/"select FNumber,FExamNum,FName,FSex,FJobAdd,FCardID,FBirDate from stuInfo/", conn);
  100.             DataSet ds = new DataSet();
  101.             da.Fill(ds);
  102.             return ds;
  103.         }
  104.         private void button2_Click(object sender, EventArgs e)
  105.         {
  106.             SaveFileDialog sfd = new SaveFileDialog();
  107.             sfd.Title = /"请选择将导出的EXCEL文件存放路径/";
  108.             sfd.FileName = System.DateTime.Now.ToShortDateString() + /"-学生信息/";
  109.             sfd.Filter = /"Excel文档(*.xls)|*.xls/";
  110.             sfd.ShowDialog();
  111.  
  112.             if (sfd.FileName != /"/")
  113.             {
  114.  
  115.                 Microsoft.Office.Interop.Excel.Application excelApp = new Microsoft.Office.Interop.Excel.Application();
  116.                 if (excelApp == null)
  117.                 {
  118.                     MessageBox.Show(/"无法创建Excel对象,可能您的机器未安装Excel/");
  119.                 }
  120.                 else
  121.                 {
  122.                     Microsoft.Office.Interop.Excel.Workbooks workbooks = excelApp.Workbooks;
  123.                     Microsoft.Office.Interop.Excel.Workbook workbook = workbooks.Add(XlWBATemplate.xlWBATWorksheet);
  124.                     Microsoft.Office.Interop.Excel.Worksheet worksheet =(Worksheet) workbook.Worksheets[1];
  125.                     DataSet ds=Bind();
  126.                     for (int i = 1; i < ds.Tables[0].Rows.Count; i++)
  127.                     {
  128.                         for (int j = 1; j < ds.Tables[0].Columns.Count;j++ )
  129.                         {
  130.                             if (i == 1)
  131.                             {
  132.                                 worksheet.Cells[i, j] = dataGridView1.Columns[j].HeaderText;
  133.  
  134.                             }
  135.                             worksheet.Cells[i+1, j] = ds.Tables[0].Rows[i][j].ToString();
  136.                         }
  137.                     }
  138.                     //保存方式一:保存WorkBook
  139.                       //workbook.SaveAs(@/"F:/CData.xls/",
  140.                       // Missing.Value,Missing.Value,Missing.Value,Missing.Value,Missing.Value,
  141.                       // Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange,Missing.Value,Missing.Value,Missing.Value,
  142.                       // Missing.Value,Missing.Value);
  143.                       //保存方式二:保存WorkSheet
  144.                       // worksheet.SaveAs(@/"F:/CData2.xls/",
  145.                       // Missing.Value, Missing.Value, Missing.Value, Missing.Value,
  146.                       // Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);
  147.                     ////保存方式三
  148.                     //workbook.Saved = true;
  149.                     //workbook.SaveCopyAs(sfd.FileName);
  150.  
  151.                     System.Runtime.InteropServices.Marshal.ReleaseComObject(worksheet);
  152.                     worksheet = null;
  153.                     System.Runtime.InteropServices.Marshal.ReleaseComObject(workbook);
  154.                     workbook = null;
  155.                     workbooks.Close();
  156.                     System.Runtime.InteropServices.Marshal.ReleaseComObject(workbooks);
  157.                     workbooks = null;
  158.                     excelApp.Quit();
  159.                     System.Runtime.InteropServices.Marshal.ReleaseComObject(excelApp);
  160.                     excelApp = null;
  161.                     MessageBox.Show(/"导出Excel完成!/");
  162.                 }
  163.             }
  164.  
  165.         }
  166.         private void button4_Click(object sender, EventArgs e)
  167.         {
  168.             string strExcelFileName = @/"F://2007-07-16-学生信息.xls/";
  169.             string strSheetName = /"sheet1/";
  170.             #region Aspnet 操作Excel  正确
  171.             ////源的定义
  172.             //string strConn = /"Provider=Microsoft.Jet.OLEDB.4.0;Data Source = /" + strExcelFileName + /";Extended Properties ='Excel 8.0;HDR=NO;IMEX=1'/";
  173.             ////Sql语句
  174.             //string strExcel = /"select * from  [/" + strSheetName + /"$]/";
  175.             ////定义存放的数据表
  176.             //DataSet ds = new DataSet();
  177.             ////连接数据源
  178.             //OleDbConnection conn = new OleDbConnection(strConn);
  179.             //conn.Open();
  180.             ////适配到数据源
  181.             //OleDbDataAdapter adapter = new OleDbDataAdapter(strExcel, conn);
  182.             //adapter.Fill(ds,/"res/");
  183.             //conn.Close();
  184.             //// 一般的情况下. Excel  表格的第一行是列名
  185.             //dataGridView2.DataSource = ds.Tables[/"res/"];
  186.             #endregion
  187.             #region COM 组件读取复杂Excel
  188.             Microsoft.Office.Interop.Excel.Application excelApp = null;
  189.             Microsoft.Office.Interop.Excel.Workbook workBook;
  190.             Microsoft.Office.Interop.Excel.Worksheet ws = null;
  191.             try
  192.             {
  193.                 excelApp = new Microsoft.Office.Interop.Excel.Application();
  194.                 workBook = excelApp.Workbooks.Open(@/"F://Book1.xls/", Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);
  195.                 ws = (Worksheet)workBook.Worksheets[1];
  196.  
  197.                 //Excel 默认为 256 列..
  198.                 MessageBox.Show(ws.Cells.Columns.Count.ToString());
  199.                 excelApp.Quit();
  200.             }
  201.             catch (Exception ex)
  202.             {
  203.                 throw ex;
  204.             }
  205.             #endregion
  206.         }
  207.     }
  208. }
原创粉丝点击