スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。


--------------------------------------------------------------------------------------

メモ。VB.NET。SPREAD for Windows Forms 7.0J のSaveExcelで列フッタを表示させる。

現在、VB.NETでGRAPECITYのSPREAD for Windows Forms 7.0J を使っての開発を行っています。

Spreadにて、入力されている金額の合計を列フッタに表示させるという要件がありました。

20131222_footer.jpg

たしかに入力中に合計値が常に見ることができるっていうのは、便利かもしれませんね。
Spreadにフッタを出すのは、デザイナでプロパティをいじるだけなので簡単にできるのですが、Spreadの内容を単純にexcelに出力させるSaveExcelメソッドを使用すると、列フッタがexcelに出てきません。

SpreadSaveExcelメソッドの引数にオプションを設定でき、列ヘッダの表示有無は設定できるのですが、フッタはないんですよね。


そこで、いろいろやり方を検討した結果、以下のように実装して実現できました。

1.Spreadのコピーを作る。
2.フッタ分の行をAdd
3.Addした箇所にフッタの情報を入れる。
4.Spreadを出力
5.コピーしたSpreadを削除。

    ''' <summary>
    ''' スプレットシートの内容をExcelへ出力する。
    ''' </summary>
    ''' <remarks></remarks>
    Private Sub OutputFpSpread()
        Dim _dialog As New SaveFileDialog()

        Dim OutputFileName As String
        OutputFileName = Today.ToString("yyyyMMdd") & "_" & Me.FormHeader.Header_FormTitleLabel.ToString & ".xlsx"

        With _dialog
            'ダイアログボックスのタイトル
            .Title = "エクセル出力"
            '初期表示するディレクトリ
            .InitialDirectory = GetDefaultSaveExcelFilePath()
            'ディフォルトの選択ファイル名
            .FileName = OutputFileName
            '【ファイルの種類】に表示するタイプ
            .Filter = "エクセルファイル(*.xlsx)|*.xlsx|すべてのファイル(*.*)|*.*"
            '【ファイルの種類】の初期表示インデックス
            .AddExtension = True
            'ファイルが存在しない時に警告メッセージを表示するかどうか(ファイルがない場合、新規作成)
            .CheckFileExists = False
            'ダイアログボックスを閉じる前に、カレントディレクトリを元にもどすか
            .RestoreDirectory = False
            '(ヘルプ)ボタンを表示するかどうか
            .ShowHelp = False

            ' Excelエクスポート用の一時的なSPREADを生成
            Dim tempSpread As New FarPoint.Win.Spread.FpSpread
            'Spreadをコピーし、編集するメソッドを呼び出し。
            tempSpread = spreadCopy(tempSpread)

            tempSpread.SaveExcel(.FileName, FarPoint.Excel.ExcelSaveFlags.UseOOXMLFormat Or
                                           FarPoint.Excel.ExcelSaveFlags.SaveCustomColumnHeaders Or
                                           FarPoint.Excel.ExcelSaveFlags.NoFormulas) Then

            'エクスポート用の一時的なSpreadを削除する。
            tempSpread.Dispose()
            tempSpread = Nothing

        End With

    End Sub



    ''' <summary>
    ''' SpreadにFpSpreadをコピーし、エクセル出力用に編集するメソッド。
    ''' </summary>
    ''' <param name="spread"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Private Function spreadCopy(spread As FarPoint.Win.Spread.FpSpread) As FarPoint.Win.Spread.FpSpread
        ' 現在のSPREADのアクティブシートをXML文字列に変換します。
        Dim XMLString As String = FarPoint.Win.Serializer.GetObjectXml(CType(FpSpread1.ActiveSheet, FarPoint.Win.ISerializeSupport), "Sheet1")

        ' XML文字列からSheetViewオブジェクトを生成します。
        Dim sv As New FarPoint.Win.Spread.SheetView
        FarPoint.Win.Serializer.SetObjectXml(CType(sv, FarPoint.Win.ISerializeSupport), XMLString, "Sheet1")

        'SheetViewオブジェクトを追加します。
        spread.Sheets.Add(sv)

        '列フッタの合計行をspreadに植え付ける。
        spread = editTmpSpreadFooter(spread)

        Return spread

    End Function


    ''' <summary>
    ''' エクセル出力用Spreadに合計行を植え付けるメソッド。
    ''' </summary>
    ''' <param name="spread"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Private Function editTmpSpreadFooter(spread As FarPoint.Win.Spread.FpSpread) As FarPoint.Win.Spread.FpSpread
        '一番下に1行追加させる。
        spread.Sheets(0).Rows.Add(spread.Sheets(0).RowCount, 1)

        Dim rowidx = spread.Sheets(0).RowCount - 1

        For i = 0 To spread.Sheets(0).ColumnCount - 1
            spread.Sheets(0).Cells(rowidx, i).Text = FpSpread1_Sheet1.ColumnFooter.Cells(0, i).Text
        Next

        Return spread

    End Function


忘れそうなのでメモでした。

参考。
テクニカルサポート
http://www.grapecity.com/tools/support/technical/knowledge_detail.asp?id=33505
http://www.grapecity.com/tools/support/technical/knowledge_detail.asp?id=33736


関連記事


--------------------------------------------------------------------------------------

コメントの投稿

非公開コメント

このブログについて
  • 全記事一覧(時間順)
  • このブログについて
  • 私のプロフィール
  • 当ブログで扱っている動画について
  • 記事違いなコメントのお返事

  • カテゴリー
    twitter
    カレンダー
    08 | 2017/09 | 10
    - - - - - 1 2
    3 4 5 6 7 8 9
    10 11 12 13 14 15 16
    17 18 19 20 21 22 23
    24 25 26 27 28 29 30
    Amazon
    でたらめな当ブログにぴったりな商品を自動で表示するみたいです。



    月別アーカイブ
    プロフィール

    たづみ

    Author:たづみ
    ・1981年生まれの男
    ・もう少し詳細なプロフィールはこちらで

    最新コメント
    アクセスランキング
    [ジャンルランキング]
    日記
    920位
    アクセスランキングを見る>>

    [サブジャンルランキング]
    会社員・OL
    188位
    アクセスランキングを見る>>


    上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。