社内でDocuWorksを使用してデータのやり取りをすることがあります。今回の依頼はexcelで作成したデータをDocuWorks形式(.dwx)に変換して共有フォルダ(NAS)に保存したいというものでした。
やり方
excelからdwxファイルを生成して直接NASに保存するのは難しいです。Fuji XeroxからAPIが提供されているのでそれを使用すればできると思うのですが、管理やメンテナンスが複雑になります。APIと聞くとやってみたくなるのがプログラマーなのですが、それは単なるプログラマーのエゴなので、もっと簡単にできる方法をご紹介します。
- dwxファイルを生成する
- いったん自分のPCに保存する
- PCに保存したdwxをNASに保存する
こうすればAPIを使用することなくdwxをNASに保存できます。
準備
必要なのはDocuWorksです。(当たり前ですが…)それから「DocuWorks Printer」もインストールされているか確認してください。dwxファイルを生成する方法はこの 「DocuWorks Printer」 を使用するからです。
ソフトウェア : ダウンロード : 富士フイルムビジネスイノベーション : 富士フイルムビジネスイノベーション
おソース
Const XDW_PATH = "\\nas\share\docu"
Sub exeDocuPrint()
Set fso = CreateObject("Scripting.FileSystemObject")
Set wsh = CreateObject("WScript.Shell")
'自分のDocuWorksに保存する
docufld = wsh.specialfolders("mydocuments") & "\Fuji Xerox\DocuWorks\DWFolders\ユーザーフォルダ"
'ファイル名
Filename = "docu_" & Format(Now, "yyyymmddhhnnss")
xdwfile = docufld & "\" & ThisWorkbook.Name & ".xdw"
srvfile = XDW_PATH & "\" & Filename & ".xdw"
'Docuファイル保存--------------------------------------------------------------
On Error Resume Next
'ユーザーフォルダに保存される。ほかの場所に直接保存するにはAPIを使うなど手間がかかるため、この方法でやる。
With Application
PRN_NM = "DocuWorks Printer"
tmp = .ActivePrinter
ActiveSheet.PrintOut ActivePrinter:=PRN_NM, from:=1, To:=1, Copies:=1, Collate:=True, IgnorePrintAreas:=False
.ActivePrinter = tmp
End With
ntime = Now + "00:00:02"
Do Until fso.FileExists(xdwfile) = True
DoEvents
If ntime < Now Then
MsgBox "タイムアップエラー:dwxファイル生成"
Exit Sub
End If
Loop
'docuファイルを目的地へコピー
FileCopy xdwfile, srvfile
ntime = Now + "00:00:02"
Do Until fso.FileExists(srvfile) = True
DoEvents
If ntime < Now Then
MsgBox "タイムアップエラー:dwxファイルコピー"
Exit Sub
End If
Loop
'コピーが完了したら元を削除
If Dir(srvfile) <> "" Then
Kill xdwfile
End If
On Error GoTo 0
End Sub
解説
docufld = wsh.specialfolders("mydocuments") & "\Fuji Xerox\DocuWorks\DWFolders\ユーザーフォルダ"
いったんdwxファイルを保存する場所の指定は決め打ちです。デフォルトではこのパスですが、もし変更していましたらそれに合わせてください。
xdwfile = docufld & "\" & ThisWorkbook.Name & ".xdw"
生成されるxdwのファイル名はこちらで指定できません。エクセルのブック名に自動的になります。ですのでThisWorkbook.Name で指定します。
With Application
PRN_NM = "DocuWorks Printer"
tmp = .ActivePrinter
ActiveSheet.PrintOut ActivePrinter:=PRN_NM, from:=1, To:=1, Copies:=1, Collate:=True, IgnorePrintAreas:=False
.ActivePrinter = tmp
End With
dwxを生成する方法は「DocuWorks Printer」を使用して印刷します。単純にPrintOut関数を使用します。
おまけ
DocuWorksのAPIに関心がある方は下記のサイトにアクセスしてみてください。DocuWorks Development Toolkitを利用してみてください。VBAでも利用できます。
よくあるご質問 富士フイルムビジネスイノベーション
サポート -
コメント