0

この解決策をオンラインで探しましたが、問題を説明するものが見つかりません。

私は vb.net に EPPLus を使用しています (OfficeOpenXml を使用)。コードは次のようになります。

Dim Package As New ExcelPackage
Dim wks As ExcelWorksheet
Dim dt As DataTable

wks.Cells("A1").LoadFromDataTable(dt, True, TableStyles.Medium9)

Dim SaveAs As New FileInfo([...somelocation.xlsx])
Package.SaveAs(SaveAs)

これを実行すると、完全に正常に動作し、.xlsx ファイルが期待どおりに保存されます。ただし、Excel で開こうとすると、
「Excel で読み取れないコンテンツが見つかりました... このブックの内容を回復しますか?」というエラーが表示されます

次に「はい」をクリックすると、完全に正常に開き、次のようなエラーレポートが表示されます。修復されたレコード: /xl/tables/table1.xml 部分のテーブル (テーブル)"

今...コード行を次のように変更すると:

wks.Cells("A1").LoadFromDataTable(dt, True, TableStyles.Medium9)

に:

wks.Cells("A1").LoadFromDataTable(dt, True)

その後、すべてがエラーなしで完全に機能します...

私は何を間違っていますか?

4

4 に答える 4

1

テーブル名と列名の両方が動的であるため、無効な文字が含まれる可能性があります。これらすべてを置き換えるコードは、私が他の誰かから盗んだものです。

protected string ReplaceSpecialChars(string inputName)
    {
        char[] verbotten = new char[] { ' ', '/', '\'', '"', '\'', '@', '`', '#', '%', '>', '<', '!', '.', '[', ']', '*', '$', ';', ':', '?', '^', '{', '}', '+', '-', '=', '~', '\\' };

        int pos = -1;
        while ((pos = inputName.IndexOfAny(verbotten)) != -1)
            inputName = inputName.Substring(0, pos) + inputName.Substring(pos + 1);

        return inputName;

    }
于 2018-11-02T16:55:24.823 に答える
0

...それで、私の問題が何であるかを理解し、誰かが私と同じくらい愚かである場合に備えて、ここにそれを入れています...

私の場合、次のように2行に分割されたカスタム列名を使用してDatatableを作成しました。

dt.Columns.Add("First Line's Text" & vbCrLf & "Second Line")

問題はvbCrLfでした-私はそれを次のように変更しました:

dt.Columns.Add("First Line's Text" & vbLf & "Second Line")

そして、エラーはなくなりました:)

これが私が経験したすべての迷惑を他の誰かに救うことを願っています!!

于 2012-10-17T20:55:30.360 に答える