vbscripでaccdb→xlsxの対応について
Windows Server2008R2上で
cscript D:\aaaa.vbs で実行しているvbscriptにてサーバーの所定のフォルダに
AccessD/B、EXCELブックを作成しています。
尚、Windows Server2008R2上にはOffice2013はインストールしておりません。
Microsoft.ACE.OLEDB12.0を再配布でインストールしています。
サーバー側で作成したAccessD/B EXCELブックを
Office2013をインストールしてあるクライアントPCにて
vbscriptにて作成したEXCELブック内の
・文字列の頭の空白
・シート名
についてお伺いしたいのでよろしくお願いします。
--------------------------------------------------------------------
vbscriptの内容は以下のとおりです。
TEST.accdb内のTABLE1の全レコードをxlsx形式のEXCELブックに出力するために
Set cnn = cat.ActiveConnection
・
Query = "select * into [Excel 12.0 Xml;DATABASE=TEST.accdb].[シート名] from [TABLE1]"
cnn.Execute Query
で実行しているのですが( Microsoft.ACE.OLEDB12.0 )
■TABLE1のフィールドの内容は ○A12B95 (○は空白の意味です)
なのですがEXCELには
A12B95
と、文字列の頭の空白がカットされて出力されてしまいます。
■シート名に()などの記号が含まれているとEXCELブック表示すると
「xxxx.xlsxの一部に問題が見つかりました。可能な限り内容を回復しますか・・・・・・・・・」
のメッセージが表示され、EXCELブックを開くと修復されますがシート名の記号が記号によっては
文字化けします。
以前は
Access2003、Excel2003だったので( Microsoft.JET.OLEDB.4.0 )
TEST.mdb内のTABLE1の全レコードをxls形式のEXCELブックに出力しており
Query = "select * into [Excel 8.0;DATABASE=TEST.mdb].[シート名] from [TABLE1]"
cnn.Execute Query
で正常に'○A12B95と出力できていました。 接頭辞「'」付きで
また、シート名に()などの記号が含まれていても正常にシート名が作成され
EXCELブック(xls)を開くことができました。
accdb形式のAccessD/BのテーブルをExcelのxls形式とxlsx形式に出力する場合とでは
文字列頭の空白処理やシート名の扱いが異なるのでしょうか。
■試しに以下の処理をしてみましたが
(1)accdb形式のAccessD/BのテーブルをAccess自体のメニューでエクスポートしてみましたが
文字列頭の空白は
xls形式では・・・・'○A12B95 接頭辞「'」あり、空白○あり
xlsx形式では・・・・A12B95 接頭辞「'」なし、空白○なし
となってしまいます。
(2)EXCEL2013の詳細設定のLotus1-2-3形式のキー操作チェックボックスをオンにして(1)の
エクスポートしてみましたが
xlsx形式では・・・・'A12B95 「接頭辞「'」は付くものの、空白○なし
となってしまいます。
(3)TEST.accdb内のTABLE1のレコードセットを作成し、テキスト項目には「'」を付けて
1レコード毎EXCELブック(xlsx)に行挿入( Addnew~Update )してみましたが
EXCELブック(xlsx)を開きテキスト項目の内容を確認しましたところ
'○A12B95 接頭辞「'」あり、空白○ありとなるものの Lenで文字数を確認すると
「'」を含めた文字数(8)になってしまいます。EXCELでは接頭辞「'」は文字扱いしないはずなのですが。
何故かテキスト項目のセルをクリックした後、再度Lenで文字数を確認すると文字数(7)になります。
■
○A12B95 はオーダー番号なので番号体系を変えることはできません。○の部分は空白以外もあります。
また、レコード件数も65,000件超のためxlsx形式でないと対処できません。
vbscriptで
accdb形式のAccessD/B内のテーブルをxlsx形式のExcelに出力した場合に
文字列の頭の空白がなくならないよう、またシート名に記号()等を使っても
正常にEXCLEブックが開ける方法がございましたらご教示下さいますでしょうか。
できれば1件1件読み込んで処理する以外の方法が望ましいです。
レコード件数が多く以前その処理だと数十分~小一時間かかっていたので
上記方法select * into [Excel・・・に変更し数分で処理できるようになりましたので。
無理な場合は1件1件読み込んで処理する場合は上記(3)が改善できる方法があればと思います