好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

c#中合并excel表格的方法示例

有多个结构一样的excel,带复杂表头需要合并为一个,且去掉多余的表头数据,可以用com组件来读取每个excel表格的range来合并到一个新的表格中。样例如图

有很多相同格式的表格,合并代码如下:

?

using system;

using system.collections.generic;

using system.text;

using system.reflection;

using excel = microsoft.office.interop.excel;

namespace consoleapplication20

{

    //添加引用-com-microsoft excel 11.0 object libery

    class program

   {

      static   void main( string [] args)

     {

        //m为表格宽度标志(excel中的第m列为最后一列),3为表头高度

       mergeexcel.domerge( new   string []

       {

         @ "e:/excel/类型a/公司a.xls" ,

         @ "e:/excel/类型a/公司b.xls"

       },

         @ "e:/excel/类型a/合并测试.xls" , "m" , 3);

       mergeexcel.domerge( new   string []

       {

         @ "e:/excel/类型b/统计表a.xls" ,

         @ "e:/excel/类型b/统计表b.xls"

       },

         @ "e:/excel/类型b/合并测试.xls" , "i" , 4);

     }

    

   }

    public   class mergeexcel

   {

    

     excel.application app = new microsoft.office.interop.excel.applicationclass();

      //保存目标的对象

     excel.workbook bookdest = null ;

     excel.worksheet sheetdest = null ;

      //读取数据的对象

     excel.workbook booksource = null ;

     excel.worksheet sheetsource = null ;

      string [] _sourcefiles = null ;

      string _destfile = string .empty;

      string _columnend = string .empty;

      int _headerrowcount = 1;

      int _currentrowcount = 0;

      public mergeexcel( string [] sourcefiles, string destfile, string columnend, int headerrowcount)

     {

      

       bookdest = (excel.workbookclass)app.workbooks.add(missing.value);

       sheetdest = bookdest.worksheets.add(missing.value, missing.value, missing.value, missing.value) as excel.worksheet;

       sheetdest.name = "data" ;

       _sourcefiles = sourcefiles;

       _destfile = destfile;

       _columnend = columnend;

       _headerrowcount = headerrowcount;

     }

      /// <summary>

      /// 打开工作表

      /// </summary>

      /// <param name="filename"></param>

      void openbook( string filename)

     {

       booksource = app.workbooks._open(filename, missing.value, missing.value, missing.value, missing.value

         , missing.value, missing.value, missing.value, missing.value

         , missing.value, missing.value, missing.value, missing.value);

       sheetsource = booksource.worksheets[1] as excel.worksheet;

     }

      /// <summary>

      /// 关闭工作表

      /// </summary>

      void closebook()

     {

       booksource.close( false , missing.value, missing.value);

     }

      /// <summary>

      /// 复制表头

      /// </summary>

      void copyheader()

     {

       excel.range range = sheetsource.get_range( "a1" , _columnend + _headerrowcount.tostring());

       range.copy(sheetdest.get_range( "a1" ,missing.value));

       _currentrowcount += _headerrowcount;

     }

      /// <summary>

      /// 复制数据

      /// </summary>

      void copydata()

     {

        int sheetrowcount = sheetsource.usedrange.rows.count;

       excel.range range = sheetsource.get_range( string .format( "a{0}" , _headerrowcount + 1), _columnend + sheetrowcount.tostring());

       range.copy(sheetdest.get_range( string .format( "a{0}" , _currentrowcount + 1), missing.value));

       _currentrowcount += range.rows.count;

     }

      /// <summary>

      /// 保存结果

      /// </summary>

      void save()

     {

       bookdest.saved = true ;

       bookdest.savecopyas(_destfile);

     }

      /// <summary>

      /// 退出进程

      /// </summary>

      void quit()

     {

       app.quit();

     }

      /// <summary>

      /// 合并

      /// </summary>

      void domerge()

     {

        bool b = false ;

        foreach ( string strfile in _sourcefiles)

       {

         openbook(strfile);

          if (b == false )

         {

           copyheader();

           b = true ;

         }

         copydata();

         closebook();

       }

       save();

       quit();

     }

      /// <summary>

      /// 合并表格

      /// </summary>

      /// <param name="sourcefiles">源文件</param>

      /// <param name="destfile">目标文件</param>

      /// <param name="columnend">最后一列标志</param>

      /// <param name="headerrowcount">表头行数</param>

      public   static   void domerge( string [] sourcefiles, string destfile, string columnend, int headerrowcount)

     {

        new mergeexcel(sourcefiles, destfile, columnend, headerrowcount).domerge();

     }

   }

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

dy("nrwz");

查看更多关于c#中合并excel表格的方法示例的详细内容...

  阅读:61次