在网上看了一些关于用c#导出excel的文章,感觉很全,不过或许是因为全吧,都感觉一头雾水了,我自己琢磨了一上午,弄出了一个超简单的,不过个人感觉很实用的利用模板导出excel表的程序,贴出来和有需要的朋友共享一下
我现在还是一学生,如有高见请指教!
需要引入的命名空间:
      using System.Reflection;
      using Microsoft.Office.Interop.Excel;(需要添加com组件Microsoft Excel 11.0 Object Library,安装了Excel才有哦!添加后发现引用里面多了 excel,microsoft.offic.core.office,VBIDE)
顺便介绍一个小的技巧,如果在建一个类的实例时,如果是用名称空间定位的如果发现名字太长,是可以给它定义一个别名的,如:using Excel = Microsoft.Office.Interop.Excel;
那么Excel就是Microsoft.Office.Interop.Excel的别名了!



  #region Excel变量(下面加了注释的是为了方便理解在下面也定义了的!)
         // Excel object references.       
        //  private Excel.Application m_objExcel = null;
        //private Excel.Workbooks m_objBooks = null;
        //private Excel._Workbook m_objBook = null;
        // private Excel.Sheets m_objSheets = null;
        // private Excel._Worksheet m_objSheet = null;
        private Excel.Range m_objRange = null;
        private object m_objOpt = Missing.Value;
        private object m_strSampleFolder;
 #endregion
//打开一个Excel应用
       private  Excel.Application m_objExcel = new Excel.Application();
//打开一个现有的工作簿
       private  Excel.Workbooks m_objBooks =m_objExcel.Workbooks;
       private  Excel._Workbook m_objBook = null;

m_objBook = m_objBooks.Open(strPath + @"\excel\表1-9 标准宗地地价评估技术要点表.xls", 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);

//打开sheet页
       private Excel.Sheets m_objSheets = null;

      m_objSheets = (Excel.Sheets)m_objBook.Worksheets;
//选择第一个sheet页
private Excel._Worksheet m_objSheet = null;

m_objSheet = (Excel._Worksheet)(m_objSheets.get_Item(1));

//下面就可以开始赋值了
最简单的
m_objRange = m_objSheet.get_Range("B" + (5 + i), m_objOpt);//定位所要填写的位置
 m_objRange.set_Value(m_objOpt, Array[0]);//赋值了(在这个里面arry是一个类型为object的数组,定义里面也是object的哦,不过既然任何东西都是继承自object那么像数字,字符串之类的当然也可以用了!)

发现没m_objSheet.get_Range("B" + (5 + i), m_objOpt),是get_Range诶,也就是说他是一个范围了如果是get_Range("B5","U5")那就是填充从B5到U5了,可以用一维数组填充,如果是B5到U8呢??就用二维数组填充撒!!那个"B" + (5 + i)是小弟为了方便用一维数组循环时,从方便出发定义的了,结果就是类似什么B5之类的了,哦,我多语了,写程序的谁不知道这点啊,
需要提醒的是如果你的表中有合并项,比如B5,C5,D5是一个格的话,就不能通过数组来偷懒了,要逐个指定,(我没找出该方法,如果你发现了,告诉我啊!)

最后就做一下收尾工作了:
 m_objBook.SaveAs(m_strSampleFolder, m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt, Excel.XlSaveAsAccessMode.xlNoChange, m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt);

m_objBook.Close(false, m_objOpt, m_objOpt);
m_objExcel.Quit();

解释一下:m_strSampleFolder是要保存为的名字
算了也一并写下吧:

                   SaveFileDialog saveDlg = new SaveFileDialog();
                    saveDlg.FileName = @"表1-9 标准宗地地价评估技术要点表.xls";

                    saveDlg.Filter = "Excel files (*.xls)|*.xls";
                    if (saveDlg.ShowDialog() == DialogResult.OK)
                    {
                        m_strSampleFolder = saveDlg.FileName;
                        // Start a new workbook in Excel.
                        m_objExcel = new Excel.Application();
                        m_objBooks = m_objExcel.Workbooks;
                        m_objBook = m_objBooks.Open(strPath + @"\excel\表1-9 标准宗地地价评估技术要点表.xls", 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));
                        object[] Array = new object[7];//从名称到比准价格7个

//下略
                    }




posted on 2008-07-13 17:14  朝阳  阅读(2029)  评论(2)    收藏  举报