2016-10-03 6 views
-1

私はいくつかのデータで名前のついた範囲をいくつか取り込む必要があるプロジェクトに取り組んでいます。しかし、私はこれらの名前付き範囲のアドレスを文字列として受け取っていますが、Microsoft.Office.Tools.Excel.NamedRangeではありません。文字列はSheet1_A1_D1のようになります。どのようにしてこれらの文字列をNamedRangeオブジェクトに変換できますか?事前定義されたメソッドはありますか?あなたのすべての協力に感謝します!どのように名前の範囲をExcelに文字列を変換するには?

答えて

0

文字列に一貫したパターンがある場合は、必要な名前付き範囲を見つけるために必要な情報を保持する配列に分割できます。

あなたがシート名と住所細胞を取得したら、範囲を名前のシートを反復して、文字列から抽出したデータと、各名前付き範囲のアドレスを比較することができますという名前を反復処理するために

private const int SHEET_ARRAY_INDEX = 0; 
    private const int RANGE_START_ARRAY_INDEX = 1; 
    private const int RANGE_END_ARRAY_INDEX = 2; 

    static void Main(string[] args) 
    { 
     string myString = "Sheet1_A1_A2"; 
     string[] rangeInfo = myString.Split('_'); 

     string sheet = rangeInfo[SHEET_ARRAY_INDEX]; // holds "Sheet1" 
     string arrayStart = rangeInfo[RANGE_START_ARRAY_INDEX]; // holds "A1" 
     string arrayEnd = rangeInfo[RANGE_END_ARRAY_INDEX]; // holds "A2" 
    } 

範囲参照してください。https://bishoponvsto.wordpress.com/2009/09/01/reading-named-ranges-in-excel-using-c/

0

を、それが厄介に見えると私はこれを行うには簡単に/より良い方法がある賭けています...しかし、これはそれが

string sheetRange = "DataSheet1_A1_D1"; 
string[] splitStringArray = sheetRange.Split('_'); 
string sheetToGet = splitStringArray[0]; 
string firstCell = splitStringArray[1]; 
string lastCell = splitStringArray[2]; 
// Use the specified sheet 
Excel.Worksheet xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets[sheetToGet]; 
// Get the full range to work with 
Range currentRange = xlWorkSheet.get_Range(firstCell + ":" + lastCell, Type.Missing); 
// Note here: 
// You could use "A","B","C"... etc to specify a column 
// However... When the range is returned... The returned range will start on Col "A" 
// so the given values wont match anyway... 
// However all we need to know though is how many columns are involved 

int colCount = currentRange.Columns.Count; 
// the variables below are for testing the output 
int curRow = 1; 
int curCol = 1; 

foreach (Range row in currentRange.Rows) 
{ 
    curCol = 1; 
    for (int i = 1; i <= colCount; i++) 
    { 
    ((Excel.Range)row.Cells[1, i]).Value2 = "Row: " + curRow + " Column: " + curCol; 
    curCol++; 
    } 
    curRow++; 
} 
をします

希望これは、あなたが名前がとても好きに参照範囲を得ることができます

0

を支援:

range = _excelApp.ActiveWorkbook.Names.OfType<Name>().SingleOrDefault(n => n.Visible && n.Name == "rangeName")?.RefersToRange; 

別のアプローチは、アドレスを解決するために、Excelを依頼することです:

range = _excelApp.get_Range(address); 

これが必要になりますアドレスは、次のいずれかの形式で指定します。

  1. B4
  2. Sheet1のB4
  3. Sheet1のA1:!!D1
  4. namedRangeName

オプション3は、あなたのケースでは、Sheet1_A1_D1は、名前付き範囲ではないようですので、移動するための方法であると思われますファンキーなアドレス文字列のようだ。最初のアンダースコアを '!'に置き換えることをお勧めします。 2つ目は ':'で、excelApp.get_rangeメソッドを使用します。

関連する問題