10

複数の領域が指定されているExcelから範囲を取得しようとしていますが、基本的には...

int StartColumn
int EndColumn
int [] ColumnsToSkip

これらを組み合わせると、隣接していない領域を持つ範囲を作成することができます。残念ながら、これを取得するための呼び出しを完全に理解することはできません...MSDNはあまり役に立ちません...

ワークシートシート;

sheet.get_Range( what goes in here??? );

誰か助けを提供しますか?乾杯。

4

3 に答える 3

11

非常に簡単な解決策は、コンマ区切り形式でさまざまな領域を指定することです。

sheet.get_Range( "A1:B1,E1:G1");

プログラムによる範囲の組み合わせには、ExcelApplicationオブジェクトのUnionandメソッドもあります。Intersectionこれらは、多くのオプションのパラメーターがあるため、C#で使用するには少し不器用です。こちらをご覧ください

http://codeidol.com/csharp/c-sharp-in-office/Working-with-Excel-Objects/Working-with-the-Range-Object/

たとえば。

編集:いくつかの追加のヒント:

あなたの場合、最初に「ColumnsToKeep」の「ColumnsToSkip」を変換する必要があります。これは、あらゆる種類のセル結合に必要なものだからです。Linqソリューションは次のとおりです。

int[] ColumnsToKeep = Enumerable.Range(StartColumn, EndColumn -StartColumn + 1)
                      .Except(ColumnsToSkip)
                      .ToArray();

次に、この例の線に沿って何かを作成できます。

   Excel.Range totalRange = null;
   foreach(int col in ColumnsToKeep)
   {
        totalRange = Union(excelApp,totalRange,(Excel.Range)sh.Cells[row, col]);
   }

ここで、「Union」は次のように定義されます。

    static Excel.Range Union(Excel.Application app, Excel.Range r1, Excel.Range r2)
    {
        if (r1 == null && r2 == null)
            return null;
        if (r1 == null)
            return r2;
        if (r2 == null)
            return r1;
        return  app.Union(r1, r2,
            null, null, null, null, null, null,
            null, null, null, null, null, null,
            null, null, null, null, null, null,
            null, null, null, null, null, null,
            null, null, null, null);
    }
于 2011-05-27T16:42:07.253 に答える
1

これを試して:

using Excel = Microsoft.Office.Interop.Excel;
  1. 範囲を配列に収集します。
Excel.Range[] ranges = new Excel.Range[] {yourRange1, yourRange2, ... };
  1. 範囲アドレスを使用して文字列範囲を作成し、そこから複数範囲を取得します。
string multiRangeStr = "";
foreach (Excel.Range range in ranges)
{
    string address = range.Address[true, true, Excel.XlReferenceStyle.xlA1];
    multiRangeStr += (multiRangeStr == "" ? "" : ";") + address;
}
//output: multiRangeStr: "A1:A3;B1:B3"

Excel.Range multiRange = wsheet.Range(multiRangeStr);
于 2020-10-07T13:59:26.553 に答える
0

連続していない範囲を操作する別の方法は、名前付き範囲を使用してExcel内でそれらを組み合わせるだけです。例:

=CHOOSE({1;2;3},RANGE1,RANGE2,RANGE3)

これにより、互いに「スタック」された範囲で構成される配列が生成されます。この数式を名前付き範囲に割り当てると、他のRangeオブジェクトと同じようにプログラムで使用できます。

于 2014-08-12T16:02:30.830 に答える