2009年2月7日土曜日

VBAでPDF

だいぶ時間がたってしまったな。
エクセルのVBEを開いて「libharu\if\vb6」のフォルダにある「*.bas」をインポート。標準モジュールを追加して下記コードを貼り付け&実行する。
Sub test1()
Dim pdf As Long
Dim font As Long
Dim page As Long
Dim fname As String * 256

fname = ThisWorkbook.Path & "\練習.pdf"

pdf = HPDF_New(AddressOf Error_Handler, ByVal vbNullString)

If pdf = 0 Then
Exit Sub
End If

Call HPDF_SetCompressionMode(pdf, HPDF_COMP_ALL)

Call HPDF_SetPageMode(pdf, HPDF_PAGE_MODE_USE_NONE) 'アウトラインやサムネイルを表示しません。

Call HPDF_SetPageLayout(pdf, HPDF_PAGE_LAYOUT_SINGLE) 'シングル表示

'Call HPDF_SetPassword(pdf, "owner", "user")

page = HPDF_AddPage(pdf)

'Call HPDF_Page_SetSize(page, HPDF_PAGE_SIZE_A4, HPDF_PAGE_LANDSCAPE) '横
Call HPDF_Page_SetSize(page, HPDF_PAGE_SIZE_A4, HPDF_PAGE_PORTRAIT) '縦

Call print_grid(pdf, page)

Call HPDF_UseJPEncodings(pdf)
Call HPDF_UseJPFonts(pdf)

'font = HPDF_GetFont(pdf, ByVal "Helvetica", ByVal vbNullString)
font = HPDF_GetFont(pdf, ByVal "MS-Gothic", ByVal "90ms-RKSJ-H")

'Call HPDF_Page_SetTextRenderingMode(page, HPDF_STROKE)
Call HPDF_Page_SetRGBFill(page, 0#, 0#, 1)
Call HPDF_Page_SetFontAndSize(page, font, 24)

Call HPDF_Page_BeginText(page)

Call HPDF_Page_TextOut(page, 10, HPDF_Page_GetHeight(page) - 50, "ハローワールド hello world")

Call HPDF_Page_EndText(page)

Call HPDF_SaveToFile(pdf, fname)

Call HPDF_Free(pdf)

End Sub

すばらしい!

2008年9月10日水曜日

Haru PDF1

前の投稿の続き。
まず、Haru PDF Libraryのページへ行き、
Downloadsコーナーから
libharu_2_0_8_dll_win32.zip
をダウンロードします。

解凍してできる[libhpdf.dll]をwindowsのシステムフォルダへコピー。

これで準備OK

PDF

エクセルからPDF使えたら便利と思いませんか?

PHP、Pythonといった言語ではフリーのライブラリがあるようですね。
調べたところ、C言語ではありますが、Haru Free PDF libraryで配布されているdllを使うと実現できそうです。

試してみましょ。

2008年6月20日金曜日

第一歩

WIN32 APIなら少しわかるので、SQLiteで配布されているwindows用のDLLをダウンロードしてエクセル2000のVBAから実行してみましたが、できません。
ネットで調べてみると、どうやらDLLを作る際にC言語の関数で規約を正しく(?ほかのアプリから使えるように)しないと無理との事。
今までWIN32のDLLでは問題なく使えてただけにちょっとびっくり。
あきらめようか。。。
再度ネットをしらべると同じ事を考えている方は世の中たくさんいるようで、挑戦してみます

とりあえず、SQLiteのサイトからソースをダウンロード。
バージョンは3.59。 
下記サイトを参考にしてやってみようかな。
http://www.tannertech.net/dev/sqlite3vb/
http://www.persistentrealities.com/index.php?p=18

VSやVCを買うお金はありませんし、仕事で使うのに自腹は面白くない。
というわけで、LCC-Win32もしくはbccを使おうかと思います。

で、途中まで作ってて思いましたが、あまりにもメンテナンスが大変そう。
SQLiteのバージョンがあがったら?
バグが見つかったら、あんなたくさんのソースから探す?
で、結論。
いきなりダイナミックリンクライブラリを作るのではなくて、スタティックライブラリを作って、リンクしてDLLを作るという2ステップをとることにしました。

コンパイラは何でもいいですが、ダウンロードしたファイルから「tclsqlite.c」だけ削除して、コンパイル。
名前も何でもいいですが、私は「sqlite359.lib」という名前を使ってスタティックライブラリを作成しました。
で、このsqlite359.libとsqlite3.hをdllを作るプロジェクトもしくはフォルダ(ディレクトリ)に持っていきます。

とりあえず、今回はここまで。
次回はそのスタティックライブラリが本当につかえるか実験。

2008年6月14日土曜日

VBAからSQLite3を使う

私は仕事でエクセルを多様しており、大量のデータを扱う場合はアクセスを使ったりしていますが、いろいろWEBで見ていると SQLite3をエクセルから使えたら便利そう。
とりあえず、出来るかがわからないので調べたところオープンソースなのでC言語からは問題なく使えるらしい。
いろいろ言語からラッパーするものがあるらしいが、SQLiteを使うためだけにいろいろ入れると本末転倒のような・・・。
とりあえず、調べてみる。