4

私はclosedXMlとExcelの使用にも(少なくともこの目的のために)本当に新しいので、ばかげた質問をしている場合は申し訳ありません。

closeXMLはまだグラフをサポートしていないことを知っているので、これを回避するために頭に浮かんだのは、Excelテーブルを使用してグラフを作成することだけでした。そうすれば、新しい行を挿入したときにClosedXMLが範囲を更新し、グラフがそれを取得すると思いました。まあ、そうではありませんでした。少なくとも、closedXMLライブラリを使用してコードから行を追加する場合はそうではありません。

興味深いのは、Excel内から新しい行を追加するとグラフが自動的に更新されることですが、コードから同じ結果を取得する場合は、名前付き範囲とともにOFFSET数式を使用してから、グラフのソースデータをこれらの名前付き範囲に設定する必要があります。そのため、新しい行を挿入するために使用するコードに問題があるかどうかを知りたいのです。

    Dim ruta As String = Server.MapPath("~/Templates/MyTemplate.xlsx")
    Dim wb As New XLWorkbook(ruta)
    Dim ws = wb.Worksheet(1)

    Dim tblData = ws.Table("Table1")

    Dim year As Integer = 2000
    For i As Integer = 1 To 13

        With tblData.DataRange.LastRow()
            .Field("Year").SetValue(year)
            .Field("Sales").SetValue(CInt(Math.Floor((2000 - 500 + 1) * Rnd())) + 500)
        End With
        tblData.DataRange.InsertRowsBelow(1)
        year = year + 1
    Next

    tblData.LastRow.Delete()

ご覧のとおり、コードは非常に単純であり、テンプレートも非常に単純です。このテンプレートは、「Year」(table1 [Year])と「Sales」(Table1 [Sales] )の2つの列のみで構成されています。

私が言ったように、Excelから直接新しい行を追加することは期待どおりに機能し、チャートシリーズに新しい行が含まれないのはコードからテーブルを生成するときだけなので、これは私のテンプレートとは何の関係もないと思います追加された ここに画像の説明を入力してください

最初の行(テーブルを挿入するときにデフォルトで追加される行)のみが含まれるため、新しい範囲( Sheet1!Table1 [Sales]およびSheet1!Table1 [Year]) を手動で追加する必要があります。ここに画像の説明を入力してください

どんな助けでも大歓迎です

PSこれは、完全なコードとExcelテンプレート(\ Templates \ MyTemplate.xlsx)を含むRARへのリンクです。

4

1 に答える 1

1

テーブルが追加の行を認識しないことが問題である場合は、最後の行の削除の後にこれを追加してみてください。

tblData.Resize tblData.Range(1, 1).CurrentRegion

これにより、テーブルのサイズが変更されます。次に、テーブル操作が機能することを願っています。

于 2013-02-27T15:24:17.490 に答える