フォルダーから複数の Excel ファイルを読み取り、それらからいくつかの情報を抽出するアプリケーションを作成することは可能ですか?
3 に答える
はい、Interop の使用方法は次のとおりです。最初に、プロジェクトに Excel Interop ライブラリを追加する必要があります。これを行うには、新しい Visual Studio ソリューションを作成し、 [参照設定] を右クリックして [参照の追加] を選択し、[.NET] タブから [ Microsoft.Office.Interop.Excel ]を選択します。
次に、Excel 用の using ステートメントと InteropServices 用の using ステートメントを追加する必要があります (COM オブジェクトと相互運用しているため)。
using Excel = Microsoft.Office.Interop.Excel;
using System.Runtime.InteropServices;
次に、メソッド内でApplicationオブジェクトを作成する必要があります。
Excel.Application application = new Excel.Application();
次に、次のように、読み取りたい各ワークブックのWorkbookオブジェクトを作成します。
Excel.Workbook workbookOne;
Excel.Workbook workbookTwo;
Excel.Workbook workbookThree;
Application オブジェクトを使用して各ワークブックを開き、それぞれのワークブックをそれぞれの Workbook オブジェクトに読み込みます。
workbookOne = application.Workbooks.Open(@"C:\workbookOneLocation.xlsx");
workbookTwo = application.Workbooks.Open(@"C:\workbookTwoLocation.xlsx");
workbookThree = application.Workbooks.Open(@"C:\workbookThreeLocation.xlsx");
次に、抽出する情報を決定する必要があります。これを行ったら、ワークブックのどのワークシートにあるのかを判断し、タブを見て数えるだけで数を計算します. 以下の例では、Sheet2が 1 番、Sheet1が 2 番、Sheet3が 3 番です。
次のように、必要な情報ごとに変数を作成します (値型の変数はすべて null 可能である必要があります)。
string firstPieceOfInformationINeed;
string[] secondPieceOfInformationINeed;
double? thirdPieceOfInformationINeed;
必要な最初の情報は、ワークブック 1 内のシート 1 のセル A1 の文字列であり、2 番目の部分はワークブック 2 内のワークシート 2 のセル B2 - B4 であり、3 番目の部分はワークシートのセル C5 の数値であるとします。ワークブック 3 内の 3 つ。これを行います:
string firstPieceOfInformationINeed;
string[] secondPieceOfInformationINeed;
double? thirdPieceOfInformationINeed;
Excel.Worksheet worksheet;
Excel.Range range;
worksheet = workbookOne.Sheets[1];
range = worksheet.Cells["1", "1"];
firstPieceOfInformationINeed = range.Value as string;
worksheet = workbookTwo.Sheets[2];
range = worksheet.Range["B2", "B4"];
secondPieceOfInformationINeed = range.Value as string[];
worksheet = workbookThree.Sheets[3];
range = worksheet.Cells["3", "5"];
thirdPieceOfInformationINeed = range.Value as double?;
次に、ブール値を使用して変更を保存するかどうかを示し、ワークブックを閉じます。
workbookOne.Close(true);
workbookTwo.Close(false);
workbookThree.Close(true);
アプリケーションを終了します。
application.Quit();
COM オブジェクトを解放します。
Marshal.ReleaseComObject(application);
これで、Excel の操作が完了し、必要なさまざまな情報がすべて C# 変数として格納されました。これらを使用して、必要なことを行うことができます。
NPOI(http://npoi.codeplex.com/)またはNetOffice(http://netoffice.codeplex.com/)ライブラリを使用してみてください
はい、そうです。Excel Interop なしでそれを行いたい場合は、Excel 2007 + で動作しますが、ClosedXML を使用できます。