LoginSignup
3
4

More than 5 years have passed since last update.

【C#】Microsoft.Office.Interop.Excelで使える二次元配列を作る

Last updated at Posted at 2019-02-11

はじめに

C#からExcelを操作する時、Microsoft.Office.Interop.Excelを利用すると、ExcelVBAと同じようにでExcelを扱えるのでとても便利です。

一方で、Excelから二次元配列としてデータを一括取得すると、配列の要素番号が1始まりになるなど、VBAと同じであるが故に少々癖が強い部分もあります。

特に、C#側で生成したデータをExcelに二次元配列として貼り付ける時は、配列の要素番号が1からスタートしていないとエラーになってしまうため、以下のような「通常の初期化」で生成した二次元配列を使うとエラーになってしまいます。

// この初期化だと、配列の要素番号が一次元、二次元ともに0からスタートする。
object[,] array2D = new object[100,100];

コード

  • 以下のように「二次元配列の最小要素番号を指定して初期化」することで、任意の要素番号からスタートする二次元配列を生成できます。
    • ここではExcelに貼り付けるための配列なので、要素番号は1からスタートさせています。
/// <summary>
/// 行数と列数を指定して、Excelに貼り付けられる二次元配列を生成する。
/// </summary>
/// <param name="rowIdx">行方向の要素数</param>
/// <param name="colIdx">列方向の要素数</param>
/// <returns>要素番号が1から始まる二次元配列</returns>
public static object[,] CreateArray2D(int rowIdx, int colIdx)
{
    // 二次元配列の各次元の最小要素番号
    int[] lower = { 1, 1 };
    // 二次元配列の各次元の要素数
    int[] length = { rowIdx, colIdx };

    return (object[,])Array.CreateInstance(typeof(object), length, lower);
}

まとめ

  • この方法を知らなくても、1セルずつ書き込めばエラーは起きません。
    • ただし、書き込むセル数が多いと処理速度が劇的に遅くなってしまいます...
  • Microsoft.Office.Interop.Excelを使わずに、POIやNPOI、ClosedXMLなど、別のライブラリを使ってExcelを操作することも可能です。
3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4