2024年8月
        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 31
無料ブログはココログ

VB.NET

VB.NET ExcelファイルからPDF出力

VB.NETでExcelからPDF出力するときに、以前はBullzipを使用してPDF化していた。
(Excelを開いて、BullzipPrinterに印刷形でPDF化)(

Office2007以降からExcel自体にPDF出力機能が追加されたので簡単にPDF出力できるようになった。またPDF化する速度が速い。


[参考コード]
       
Private Function OpenExcelToPDF() As Boolean

    Dim rtn As Boolean = False
    Dim fn As String = "C:\temp\aaa.xls"
    Dim xlApp As Object
    xlApp = CreateObject("Excel.Application")
    xlApp.DisplayAlerts = False

    Try
        Dim xlBooks As Object = xlApp.Workbooks
        Dim xlBook As Object = xlBooks.Open(fn)
        Dim xlSheets As Object = xlBook.Sheets
        Dim newFn As String = "C:\temp\bbb.pdf"

        xlBook.ExportAsFixedFormat(Type:=0, _
                                   Filename:=newFn, _
                                   Quality:=0, _
                                   IncludeDocProperties:=True, _
                                   IgnorePrintAreas:=False, _
                                   OpenAfterPublish:=False)

        xlBook.Save()

        If Not xlSheets Is Nothing Then
            Try
            Finally
                System.Runtime.InteropServices.Marshal.ReleaseComObject(xlSheets)
            End Try
        End If

        If Not xlBook Is Nothing Then
            Try
                xlBook.Close()
            Finally
                System.Runtime.InteropServices.Marshal.ReleaseComObject(xlBook)
            End Try
        End If

        If Not xlBooks Is Nothing Then
            Try
            Finally
                System.Runtime.InteropServices.Marshal.ReleaseComObject(xlBooks)
            End Try
        End If

        rtn = True

    Catch ex As Exception
        errmsg = ex.Message
        Console.WriteLine("ERROR! ->" & errmsg)
    Finally
        If Not xlApp Is Nothing Then
            Try
                xlApp.Quit()
            Finally
                System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp)
            End Try
        End If
    End Try
   
    Return rtn

End Function

VB.NET ファイル名結合

いつもSystem.IO.PathなのかSystem.IO.Fileだったか忘れてしまうのでメモ。
Combine(コンバイン)メソッド


Dim fn As String = System.IO.Path.Combine("C:\Temp", "abc.txt")
Console.WriteLine(fn)

「C:\temp\abc.txt」が出力される


Windows2008R2 + VB.NET + Excel

Windows2008R2でVB.NETからCreateObject等でEXCEL(32bit)を操作する場合、DCOMの設定変更が必要。

■設定変更手順

1.ファイル名を指定して実行で「dcomcnfg.exe /32」と入力して実行

2.「コンポーネントサービス」→「コンピュータ」→「マイコンピュータ」→「DCOMの構成」の順にクリック

3.「Microsoft Excel」を右クリックしてプロパティ表示

4. 「ID」タブをクリック

5.「このユーザー」をクリックして、ユーザー名とパスワードを入力

SQLite + VB.NET Insertが遅い

VB.NETからSQLiteのテーブルにInsertするプログラムを作ったのですが、異様に時間がかかる。
データ件数が1万件以上あるのでこんなものかなと思ってました。

「SQLite Insert」で検索すると、どうやらトランザクションを使用しないと遅いらしい。
トランザクションを使用してみると見違えるほど速くなった。


参考にさせてもらったサイト

SQLite の INSERT は遅いのか?  ランディネットワーク
http://www.randynetwork.com/blog/87


DataGridViewの新規行

DataGridView(DataSetにBind)で明細入力を行い、DataGridViewの外側に配置した行追加ボタンを押すと新規行が追加される仕様でプログラムを作成していたのですが、どうも動きがおかしい。
新規行にフォーカスがあるはずなのにDataGridView.CurrentRow.Indexでみると新規行-1の値が返ってくる。

Googleで検索すると・・・
「新規行に何も入力せず他のコントロールにフォーカスを移した場合、
現在行は新規行の一つ上、データがある最終行に自動的に戻ります。
この仕様そのものは妥当な動きだと思いますが、お望みの機能を実現する場合には厄介ですね。
ついでに選択中のセルとフォーカス中のセルが別になってるのも分かりづらい」
という記事を発見。

行追加ボタンのCausesValidationを既定のTrueからFalseに設定したらDataGridView.CurrentRow.Indexが新規行が返されるようになった。

VB.NET DLLでapp.config

自分メモ。
DLL単体でapp.configは使わないこと。

デバッグ時は「My.Settings.項目名」で設定値が取得できるので問題ないと思っていたが、DLL単独の設定値を保存できない。
(呼び出し側のアプリケーションのapp.configを参照することは可)

app.configはあくまでもアプリケーション(exe)用ということか。

VB.NET XMLコメントタグ

・C#のコメントタグの例

/// <summary>
/// 関数のコメント
/// </summary>
/// <param name="xxx">パラメータの説明</param>
/// <returns>bool</returns>

・VB.NETのコメントタグの例

''' <summary>
''' 関数のコメント
''' </summary>
''' <param name="xxx">パラメータの説明</param>
''' <returns>bool</returns>


VB.NET CausesValidation

CausesValidationプロパティは自コントロールのValidation(検査)イベントの発生を抑制するのではなく、自コントロールにフォーカスが移る時に他コントロールのValidation(検査)イベントの発生を抑制する。

ずっと逆だと思ってた・・・

VB.NET 型の検証

C#ではこう書く
    if (obj is Label) {
        MessageBox.Show("Label と互換性のあるクラスです");
    }

VB.NET
    If TypeOf obj Is Label Then
        MessageBox.Show("Label と互換性のあるクラスです");
    End If

C#は直感的にわかりやすいけど、VB.NETの書き方がわからなかったのでメモ。

VB.NET 継承

VB.NETの継承の宣言方法が今ひとつわからなかったのでメモ。

C#の場合はこう
IPrint print1 = new Print1.PrintLn("Hello World!");

VB.NET
Dim print1 As IPrint = New Print1.PrintLn("Hello World!")

より以前の記事一覧