Microsoft Access内に取り込む必要があるExcelワークブックのフォルダがあり — SQLクエリ、テーブル間の結合、インデックス作成、レポートデータベースへの供給用 — な場合。各XLSXをAccessで開いてインポートウィザードをクリックするのは2、3ファイルを超えるとスケールしません。Total Excel Converter Xは、GUIなし、Microsoft Officeのインストールも不要で、コマンドラインからXLSとXLSXファイルをDBF(AccessがネイティブにインポートするdBase IV形式)にバッチ変換します。Windowsサーバーにインストールし、スクリプトやActiveX経由で呼び出して、無人で実行できます。
*.xlsx)を指定するだけで、一致するすべてのファイルを一回の実行で処理
(30日間、メール登録不要)
(サーバーライセンス、永続版)
Windows 7/8/10/11 • Server 2008/2012/2016/2019/2022
Excelはスプレッドシートです。各ワークシートはフラットなグリッド — 行と列で、その上に数式と書式が重ねられています。Excelは1シートあたり1,048,576行まで扱えますが、ネイティブの結合、ファイル間のインデックス付き検索、共有トランザクションモデルはありません。同じXLSXを編集する2人のアナリストは2つの分岐したコピーを生成します。30のワークブックにまたがるデータをレポートするには、列がシフトした瞬間に壊れるVLOOKUPチェーンを書くことになります。
Access(およびFoxPro、OpenOffice Base、ほとんどのBIツールを含むDBFを取り込むあらゆるデータベース)はリレーショナルデータ向けに構築されています。テーブルには型付きフィールド、主キー、インデックスがあります。クエリはSQLを使用します:結合、集計、フィルタ、サブクエリ。1つのAccessデータベースは複数のリンクされたテーブルにわたって数千万行を保持し、フォームとレポートを通じて提供できます。Excelデータがそのような分析を駆動する必要があるとき、まずデータベーステーブルに到達する必要があります — そしてDBFはAccessが変換摩擦なしにインポートする形式です。
| Excel | Access / DBF | |
|---|---|---|
| 構造 | シートごとのフラットグリッド | 型付きフィールド、インデックス、リレーション |
| クエリ | 数式、VLOOKUP | 結合と集計を持つSQL |
| 規模 | シートあたり100万行、100Kを超えると遅い | テーブルあたり数千万行 |
| 同時実行 | 一度に1人のエディター | 行ロックでマルチユーザー |
| ワークフロー | アドホック分析 | レポート、ETL、BIパイプライン |
上のリンクからインストーラーをダウンロードし、Windowsサーバーまたはワークステーションで実行します。セットアップは1分以内で完了します。Microsoft Officeのインストールは不要です — コンバーターは独自エンジンでXLSとXLSXを直接解析し、数式、日付、数値精度、Unicode文字列を含みます。
cmd.exeまたはPowerShellを開きます。コンバーターの実行ファイルはXLSConverter.exeで、インストールフォルダ(通常はC:\Program Files\CoolUtils\TotalExcelConverterX\)にあります。システムPATHに追加するか、コマンドでフルパスを使用してください。
最もシンプルなコマンドは、フォルダ内のすべてのExcelファイルをDBFに変換します:
XLSConverter.exe C:\Books\*.xlsx C:\Output\ -c DBF
このコマンドはC:\Books\内のすべての.xlsxファイルを処理し、変換後のDBFテーブルをC:\Output\に保存します。各ワークブックから同じベース名のDBFが1つ生成され、外部データ → dBaseファイルを介してAccessにドラッグする準備ができています。
追加のフラグで列がDBFフィールドにどのようになるかを制御します:
XLSConverter.exe C:\Books\*.xlsx C:\Output\ -c DBF -Sheet Sheet1 -FirstRowHeader 1 -log C:\Logs\xls2dbf.log
-Sheet Sheet1 — 名前で特定のワークシートを選択(またはインデックスを使用)-FirstRowHeader 1 — 行1をフィールド名として扱う。コンバーターが有効なDBF識別子にサニタイズ-Range A1:G500 — 変換を特定のセル範囲に制限-log C:\Logs\xls2dbf.log — 各入力ファイル、出力ファイル、行数、フィールド切り捨て警告をリストする変換ログを出力コマンドを.batファイルに保存し、Windowsタスクスケジューラでスケジュールします:
@echo off "C:\Program Files\CoolUtils\TotalExcelConverterX\XLSConverter.exe" C:\Incoming\*.xlsx C:\Archive\DBF\ -c DBF -FirstRowHeader 1 -log C:\Logs\xls2dbf.log
毎晩、または財務チームが受信フォルダに日次ワークブックを置いた後に実行します。DBFファイルはODBC経由でAccessにリンクされるか、ネイティブテーブルとしてインポートされ、レポートパイプラインの残りはスプレッドシートのもつれではなく本物のデータベースに対して実行されます。
Total Excel Converter Xには完全なActiveXインターフェースが含まれています。.NET、VBScript、PHP、Python、Ruby、ASPなど、あらゆるCOM互換環境からコンバーターを呼び出せます。これにより、コマンドラインプロセスを外部起動することなく、独自のETLサービス、イントラネットポータル、データ取り込みアプリケーションにExcel-to-DBF変換を組み込めます。
例(C#/.NET):
XLSConverterX Cnv = new XLSConverterX();
Cnv.Convert("C:\\Books\\sales.xlsx", "C:\\Output\\sales.dbf", "-c DBF -FirstRowHeader 1 -log c:\\Logs\\xls.log");
例(PHP):
$c = new COM("XLSConverter.XLSConverterX");
$c->convert("C:\\Books\\sales.xlsx", "C:\\Output\\sales.dbf", "-c DBF -FirstRowHeader 1 -log c:\\Logs\\xls.log");
同じ呼び出しがASP.NET、VBScript、Python、Ruby、Perl、JavaScript(Windows Script Host)でも動作します。アプリケーションはWebフォームからアップロードされたXLSXファイルを受け取り、DBFに変換し、結果をAccessにリンクするか、SQL Serverのステージングテーブルに直接ロードできます。
| 機能 | オンラインコンバーター | Total Excel Converter X |
|---|---|---|
| バッチ処理 | 一度に1ファイルのみ | バッチあたりファイル数無制限 |
| ファイルのプライバシー | サードパーティサーバーにアップロード | ファイルは自分のマシンから外に出ない |
| フィールド型検出 | すべてがCharacterになる | Numeric、Date、Logical、Characterを推論 |
| シート選択 | 最初のシートのみ | 名前またはインデックスで任意のシート |
| 行制限 | 10K-50K行が上限であることが多い | 人為的な上限なし |
| 自動化 | 手動のみ | コマンドライン、.bat、タスクスケジューラ、ActiveX |
| サーバー展開 | 不可 | サーバー向け設計、GUI不要 |
| Excelのインストール必須 | 該当なし | 不要 |
コンバーターは直接XLSとXLSXを読み取り、Microsoft Excel、LibreOffice、その他のスプレッドシートアプリケーションをインストールせずにDBFテーブルを書き出します。これによりサーバーごとのOfficeライセンスを回避し、無人シナリオでのExcel自動化のよく知られた不安定さを回避できます。
数値は数値のまま、日付はDateフィールドのまま、true/falseフラグはLogicalになり、テキストは適切な幅を持つCharacterになります。Accessは結果を適切に型付けされたテーブルとしてインポートし、すぐにインデックス、結合、クエリができます — インポート後の変換ステップは不要です。
Total Excel Converter Xは無人運用向けに設計されています。GUIウィンドウ、ダイアログボックス、確認プロンプトはありません。コマンドラインから、またはサービスの一部としてサイレントに実行されます — ETLホストやデータ取り込みサーバーに必要なものそのものです。
同じコマンドラインツールでExcelをCSV、JSON、XML、SQL、PDF、HTML、ODSなどに変換できます。1回のインストールでExcelからデータベースへ、Excelからドキュメントへの完全なパイプラインに対応します。-c DBFを-c SQLに変更するだけで、同じバッチ機能と自動化機能で、MySQL、PostgreSQL、SQL ServerにロードできるINSERT文のスクリプトが得られます。
(30日間、メールやクレジットカード不要)
(サーバーライセンス、永続版)
Windows 7/8/10/11 • Server 2008/2012/2016/2019/2022
"当院のクリニックは毎週XLSXで利用率データを提出します。Accessにそれらをインポートウィザード経由でロードすると毎週月曜日に2時間かかっていました。今ではSMB共有上のスケジュールされた.batからXLSConverter.exeを実行し、リンクされたDBFテーブルが自動的に更新されます。フィールド型が正しく渡され、Accessウィザードが文字化けさせていた日付列も含まれます。週に2時間取り戻し、手動操作はゼロです。"
Linnea Ostberg Database Administrator, Regional Health Network
"傾向分析のために15年分の配車スプレッドシートを単一のAccessデータベースに移行する必要がありました。Total Excel Converter Xはアーカイブ全体を1つのバッチで処理しました — 約4,200ワークブック — 長い週末を使って。ログファイルがヘッダー行が悪い少数のファイルをフラグし、残りは適切なNumericとDateフィールドでAccessに到達しました。手動インポートや、誰も保守できない一回限りのPythonスクリプトに比べてはるかに優れています。"
Daniel Petrescu Reporting Analyst, Logistics Co.
"取り込みサービスにCOMインターフェース経由でXLSConverterを組み込んでいます。顧客はポータルからExcelレートカードをアップロードし、サービスはそれらをDBFに変換し、SQL Serverにプロモートする前の検証のためにステージングAccessデータベースに結果をリンクします。ActiveX呼び出しは速く予測可能です。シート選択とFirstRowHeaderはほぼすべての顧客テンプレートをカバーします。いくつかのエッジケースは私たちの側で前処理が必要でしたが、質問したときサポートは反応してくれました。"
Aiyana Holloway ETL Developer, Insurance SaaS
XLSConverter.exe C:\Books\*.xlsx C:\Output\ -c DBF です。ソースフォルダ内のすべてのExcelワークブックをDBFテーブルに変換し、Accessは外部データ → dBaseファイルを介してネイティブにインポートします。-FirstRowHeader 1を追加して行1をフィールド名として使用し、-Sheetで特定のワークシートを選択できます。-FirstRowHeader 1を指定すると、最初の行がフィールド名を提供し、有効なDBF識別子(最大10文字、空白なし)にサニタイズされます。-Sheet SheetNameを使用して特定のシートを変換するか、ワークシートごとに1つのDBFを生成するためにコンバーターを各シートに対して1回ずつ実行してください。各DBFは別々のテーブルとしてAccessにインポートでき、以前は1つのワークブックに存在していたシート間で結合できるようになります。
string src = @"C:\test\Source.xlsx";
string dest = @"C:\test\Dest.pdf";
var cnv = new ExcelConverterX();
cnv.Convert(src, dest, "-cPDF -log c:\\test\\Excel.log");
if (!string.IsNullOrEmpty(cnv.ErrorMessage))
throw new Exception(cnv.ErrorMessage);
public static class Function1
{
[FunctionName("Function1")]
public static async Task Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
ILogger log)
{
StringBuilder sbLogs = new StringBuilder();
sbLogs.AppendLine("started...");
try
{
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.CreateNoWindow = true;
startInfo.UseShellExecute = false;
var assemblyDirectoryPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
assemblyDirectoryPath = assemblyDirectoryPath.Substring(0, assemblyDirectoryPath.Length - 4);
var executablePath = $@"{assemblyDirectoryPath}\Converter\ExcelConverterX.exe";
sbLogs.AppendLine(executablePath + "...");
var srcPath = $@"{assemblyDirectoryPath}\src\sample.xlsx";
var outPath = Path.GetTempFileName() + ".pdf";
startInfo.FileName = executablePath;
if (File.Exists(outPath))
{
File.Delete(outPath);
}
if (File.Exists(executablePath) && File.Exists(srcPath))
{
sbLogs.AppendLine("files exists...");
}
else
sbLogs.AppendLine("EXE & source files NOT exists...");
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
startInfo.Arguments = $"{srcPath} {outPath}";
using (Process exeProcess = Process.Start(startInfo))
{
sbLogs.AppendLine($"wait...{DateTime.Now.ToString()}");
exeProcess.WaitForExit();
sbLogs.AppendLine($"complete...{DateTime.Now.ToString()}");
}
int sleepCounter = 10;
while(!File.Exists(outPath) && sleepCounter > 0)
{
System.Threading.Thread.Sleep(1000);
sbLogs.AppendLine("sleep...");
sleepCounter--;
}
if (File.Exists(outPath))
sbLogs.AppendLine("Conversion complete successfully.");
}
catch (Exception ex)
{
sbLogs.AppendLine(ex.ToString());
}
return new OkObjectResult(sbLogs);
}
}
dim C
Set C=CreateObject("ExcelConverter.ExcelConverterX")
C.Convert "c:\test\source.xlsx", "c:\test\dest.pdf", "-cPDF -log c:\test\Excel.log"
Response.Write C.ErrorMessage
set C = nothing
dim C
Set C=CreateObject("ExcelConverter.ExcelConverterX")
Response.Clear
Response.AddHeader "Content-Type", "binary/octet-stream"
Response.AddHeader "Content-Disposition", "attachment; filename=test.pdf"
Response.BinaryWrite C.ConvertToStream("C:\www\ASP\Source.xlsx", "C:\www\ASP", "-cpdf -log c:\html.log")
set C = nothing
$src="C:\\test\\test.xlsx";
$dest="C:\\test\\test.csv";
if (file_exists($dest)) unlink($dest);
$c= new COM("ExcelConverter.ExcelConverterX");
$c->convert($src,$dest, "-c csv -log c:\\test\\xls.log");
if (file_exists($dest)) echo "OK"; else echo "fail:".$c->ErrorMessage;
require 'win32ole'
c = WIN32OLE.new('ExcelConverter.ExcelConverterX')
src = "C:\\test\\test.xlsx"
dest = "C:\\test\\test.pdf"
c.convert(src, dest, "-c PDF -log c:\\test\\Excel.log")
if not File.exist?(dest)
puts c.ErrorMessage
end
import win32com.client
import os.path
c = win32com.client.Dispatch("ExcelConverter.ExcelConverterX")
src = "C:\\test\\test.xlsx"
dest = "C:\\test\\test.pdf"
c.convert(src, dest, "-c PDF -log c:\\test\\Excel.log")
if not os.path.exists(dest):
print(c.ErrorMessage)
uses Dialogs, Vcl.OleAuto;
var
c: OleVariant;
begin
c := CreateOleObject('ExcelConverter.ExcelConverterX');
c.Convert('c:\test\source.xlsx', 'c:\test\dest.pdf', '-cPDF -log c:\test\Excel.log');
if c.ErrorMessage <> '' then
ShowMessage(c.ErrorMessage);
end;
var c = new ActiveXObject("ExcelConverter.ExcelConverterX");
c.Convert("C:\\test\\source.xlsx", "C:\\test\\dest.pdf", "-c PDF");
if (c.ErrorMessage != "")
alert(c.ErrorMessage)
use Win32::OLE; my $src = "C:\\test\\test.xlsx"; my $dest = "C:\\test\\test.csv"; my $c = CreateObject Win32::OLE 'ExcelConverter.ExcelConverterX'; $c->convert($src, $dest, "-c csv -log c:\\test\\xls.log"); print $c->ErrorMessage if -e $dest;
無料トライアルをダウンロードして、ファイルを数分で変換。
クレジットカードもメールアドレスも不要。