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();
}
}
}
.NET OLEDBプロバイダを使用して、ユニオンでデータを照会してみてください。 –