2016-08-25 5 views
0

Microsoft.Office.Interop.Excel;名前空間を使用せずに複数のExcelワークシートを1つにマージする別の方法があるのだろうかと思います。別の方法でワークシートをExcelに集約する#

私は現在、このためにC#を使用しており、C#で別の方法を見つける必要があります。

理由は、私のコントロール外ですが、それがなければこれを行う別の方法があるのだろうかと思っていました。

私はアイデアやこれまでどんな助けにもオープンしています。以下は

これまでに(完全に動作する)

using Microsoft.Office.Interop.Excel; 

namespace MergeWorkBooks 
{ 
    internal class Program 
    { 
     private static void Main(string[] args) 
     { 
      string mergedWorkbookName = "MergedWorkbook.xlsx"; 
      string[] sourceFilePaths = new string[] { "STORE_OPS_00_COVER.xlsx", "STORE_OPS_01_STOCK_ACCOUNT_MOVEMENT_REPORT.xlsx", "STORE_OPS_02_SALES_SUMMARY.xlsx", "STORE_OPS_03_DISPATCHES.xlsx" }; 
      string destinationFilePath = @"C:\Users\bb\Documents\" + mergedWorkbookName; 

      MergeWorkbooks(destinationFilePath, sourceFilePaths); 
     } 

     public static void MergeWorkbooks(string destinationFilePath, params string[] sourceFilePaths) 
     { 
      var app = new Application(); 
      app.DisplayAlerts = false; // No prompt when overriding 

      // Create a new workbook (index=1) and open source workbooks (index=2,3,...) 
      Workbook destinationWb = app.Workbooks.Add(); 
      foreach (var sourceFilePath in sourceFilePaths) 
      { 
       app.Workbooks.Add(sourceFilePath); 
      } 

      // Copy all worksheets 
      Worksheet after = destinationWb.Worksheets[1]; 
      for (int wbIndex = app.Workbooks.Count; wbIndex >= 2; wbIndex--) 
      { 
       Workbook wb = app.Workbooks[wbIndex]; 
       for (int wsIndex = wb.Worksheets.Count; wsIndex >= 1; wsIndex--) 
       { 
        Worksheet ws = wb.Worksheets[wsIndex]; 
        ws.Copy(After: after); 
       } 
      } 

      // Close source documents before saving destination. Otherwise, save will fail 
      for (int wbIndex = 2; wbIndex <= app.Workbooks.Count; wbIndex++) 
      { 
       Workbook wb = app.Workbooks[wbIndex]; 
       wb.Close(); 
      } 

      // Delete default worksheet 
      after.Delete(); 

      // Save new workbook 
      destinationWb.SaveAs(destinationFilePath); 
      destinationWb.Close(); 

      app.Quit(); 
     } 
    } 
} 
+0

.NET OLEDBプロバイダを使用して、ユニオンでデータを照会してみてください。 –

答えて

1

私は正確なコードを知らないが、私はEPPlus(http://epplus.codeplex.com/、またはnuget経由)ができるようになることをかなり確信しているC#のですあなたがしたいことをする。私は実際にExcelファイルをロードするためにそれを使用したことはありませんが、他のワークシートからワークシートをコピーできます。

EPPlusは、interopと同じようにマシンにExcelをインストールする必要はなく、C#ライブラリと同程度のクリーンアップもしません。

関連する問題