1

試みる

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;
4

1 に答える 1

3

ワークシート名を引用符で囲みます。

var tempSheet = wrksheets["\"" + sheetName + "\""] as Worksheet;
于 2012-12-17T18:43:07.817 に答える