C#合并多个结构一样的Excel

来源:互联网 发布:阿里云价格怎么定义的 编辑:程序博客网 时间:2024/06/05 07:11
  1. 合并代码如下:
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Text;
  5. using System.Reflection;
  6. using Excel = Microsoft.Office.Interop.Excel;
  7. namespace ConsoleApplication20
  8. {
  9.     //添加引用-COM-MicroSoft Excel 11.0 Object Libery
  10.     class Program
  11.     {
  12.         static void Main(string[] args)
  13.         {
  14.             //M为表格宽度标志(Excel中的第M列为最后一列),3为表头高度
  15.             MergeExcel.DoMerge(new string[] 
  16.             {
  17.                 @"E:/excel/类型A/公司A.xls"
  18.                 @"E:/excel/类型A/公司B.xls" 
  19.             },
  20.                 @"E:/excel/类型A/合并测试.xls""M", 3);
  21.             MergeExcel.DoMerge(new string[] 
  22.             {
  23.                 @"E:/excel/类型B/统计表A.xls"
  24.                 @"E:/excel/类型B/统计表B.xls" 
  25.             },
  26.                 @"E:/excel/类型B/合并测试.xls""I", 4);
  27.         }
  28.  
  29.         
  30.     }
  31.     public class MergeExcel
  32.     {
  33.         
  34.         Excel.Application app = new Microsoft.Office.Interop.Excel.ApplicationClass();
  35.         //保存目标的对象
  36.         Excel.Workbook bookDest = null;
  37.         Excel.Worksheet sheetDest = null;
  38.         //读取数据的对象 
  39.         Excel.Workbook bookSource = null;
  40.         Excel.Worksheet sheetSource = null;
  41.         string[] _sourceFiles = null;
  42.         string _destFile = string.Empty;
  43.         string _columnEnd = string.Empty;
  44.         int _headerRowCount = 1;
  45.         int _currentRowCount = 0;
  46.         public MergeExcel(string[] sourceFiles,string destFile,string columnEnd,int headerRowCount)
  47.         {
  48.             
  49.             bookDest = (Excel.WorkbookClass)app.Workbooks.Add(Missing.Value);
  50.             sheetDest = bookDest.Worksheets.Add(Missing.Value, Missing.Value, Missing.Value, Missing.Value) as Excel.Worksheet;
  51.             sheetDest.Name = "Data";
  52.             _sourceFiles = sourceFiles;
  53.             _destFile = destFile;
  54.             _columnEnd = columnEnd;
  55.             _headerRowCount = headerRowCount;
  56.         }
  57.         /// 
  58.         /// 打开工作表
  59.         /// 
  60.         /// 
  61.         void OpenBook(string fileName)
  62.         {
  63.             bookSource = app.Workbooks._Open(fileName, Missing.Value, Missing.Value, Missing.Value, Missing.Value
  64.                 , Missing.Value, Missing.Value, Missing.Value, Missing.Value
  65.                 , Missing.Value, Missing.Value, Missing.Value, Missing.Value);
  66.             sheetSource = bookSource.Worksheets[1] as Excel.Worksheet;
  67.         }
  68.         /// 
  69.         /// 关闭工作表
  70.         /// 
  71.         void CloseBook()
  72.         {
  73.             bookSource.Close(false, Missing.Value, Missing.Value);
  74.         }
  75.         /// 
  76.         /// 复制表头
  77.         /// 
  78.         void CopyHeader()
  79.         {
  80.             Excel.Range range = sheetSource.get_Range("A1", _columnEnd + _headerRowCount.ToString());
  81.             range.Copy(sheetDest.get_Range("A1",Missing.Value));
  82.             _currentRowCount += _headerRowCount;
  83.         }
  84.         /// 
  85.         /// 复制数据
  86.         /// 
  87.         void CopyData()
  88.         {
  89.             int sheetRowCount = sheetSource.UsedRange.Rows.Count;
  90.             Excel.Range range = sheetSource.get_Range(string.Format("A{0}", _headerRowCount + 1), _columnEnd + sheetRowCount.ToString());
  91.             range.Copy(sheetDest.get_Range(string.Format("A{0}", _currentRowCount + 1), Missing.Value));
  92.             _currentRowCount += range.Rows.Count;
  93.         }
  94.         /// 
  95.         /// 保存结果
  96.         /// 
  97.         void Save()
  98.         {
  99.             bookDest.Saved = true;
  100.             bookDest.SaveCopyAs(_destFile);
  101.         }
  102.         /// 
  103.         /// 退出进程
  104.         /// 
  105.         void Quit()
  106.         {
  107.             app.Quit();
  108.         }
  109.         /// 
  110.         /// 合并
  111.         /// 
  112.         void DoMerge()
  113.         {
  114.             bool b = false;
  115.             foreach (string strFile in _sourceFiles)
  116.             {
  117.                 OpenBook(strFile);
  118.                 if (b == false)
  119.                 {
  120.                     CopyHeader();
  121.                     b = true;
  122.                 }
  123.                 CopyData();
  124.                 CloseBook();
  125.             }
  126.             Save();
  127.             Quit();
  128.         }
  129.         /// 
  130.         /// 合并表格
  131.         /// 
  132.         /// 源文件
  133.         /// 目标文件
  134.         /// 最后一列标志
  135.         /// 表头行数
  136.         public static void DoMerge(string[] sourceFiles, string destFile, string columnEnd, int headerRowCount)
  137.         {
  138.             new MergeExcel(sourceFiles, destFile, columnEnd, headerRowCount).DoMerge();
  139.         }
  140.     }
  141. }
原创粉丝点击