4

C#で記述されたExcel用のVSTOプロジェクトでは、セルの文字列リストからRangeオブジェクトを取得する必要があります。

問題の簡略化されたバージョンは次のとおりです。

string strRange = "A1:A2,A5";
Excel.Range r = sheet.get_Range(strRange);

ただし、リストの区切り文字は、カルチャ設定が異なればコンマとは異なる可能性があるため、実際に使用しているのは次のとおりです。

listSep = System.Globalization.CultureInfo.CurrentCulture.TextInfo.ListSeparator;
string strRange = "A1:A2" + listSep + "A5";
Excel.Range r = sheet.get_Range(strRange);

私の問題は、ユーザーがExcelの[オプション]> [詳細設定](Application.DecimalSeparator)の[小数点記号]をListSeparatorと一致するように変更した場合、これが機能しないことです。

範囲を指定する文字列を使用してget_Rangeを呼び出す正しい方法は何ですか?

編集:以下の私のコメントの情報を追加するためのわずかな変更。

4

2 に答える 2

3

最もクリーンなアプローチではありませんが、この回避策が役立ちました:

private static string GetRangeSeparator(Excel.Worksheet sheet)
{
     Excel.Application app = sheet.Application;
     string sRng = app.Union(sheet.get_Range("A1"), sheet.get_Range("A3")).AddressLocal;
     sRng = sRng.Replace("$", string.Empty);
     string sSep = sRng.Substring(sRng.IndexOf("A3") - 1, 1);
     return sSep;
}

それが誰かを助けることを願っています。

于 2012-10-09T11:09:46.813 に答える
0

Application.Unionこの方法を使用して範囲を構築することを検討してください。(未テスト) のようなもの:

Application.Union(sheet.get_Range("A1:A2"), sheet.get_Range("A5"));
于 2012-09-25T17:31:45.670 に答える