試みる
var tempSheet = wrksheets[sheetName] as Worksheet;
ここで、wrksheets
はシートタイプです。sheetNameは「スペース付きのシート名」です。
sheetNameにスペースがない場合は正常に機能しますが、スペースがある場合は、インデックスが無効であるという例外が発生します。私はワークシートの名前しか知らず、その索引も知りません。私が考えることができる唯一のことは、シートをループして、各シートの名前をsheetNameと比較することです。効率的ではありませんが、もっと良い方法はありますか?ありがとう
シート名を「スペース付きのシート名」と編集します。シート内のセルを「スペース付きのシート名」と言うと、「スペース付きのシート名」になります!wrksheets[sheetName]で「スペース付きのシート名」を使用するとA1になります。無効なインデックス例外が発生します。問題は、一重引用符を含む元のシート名ではなく、sheetNameとして「スペースを含むシート名」を使用する必要があることです。
そこで、wrksheetsからシートを取得する前に、シート名の無効な文字やエスケープ文字を削除する関数を作成すると、正常に機能します。
private string RemoveEscapeCharsFromSheetName(string sheetName)
{
//TODO: should remove all chars that are not allowed in Excel Sheet Name
sheetName = sheetName.Trim(new char[] { ' ', '\'' });
return sheetName;
}
sheet = RemoveEscapeCharsFromSheetName(sheet);
var tempSheet = wrksheets[sheet] as Worksheet;