アウトレットに関する情報をExcelからロジスティックスSaaSサービス「Ant Logistics」にアップロードするために、Webブラウザーを使用することにしました。 通常、ファイルをサーバーにアップロードし、任意のライブラリを使用してデータベースにアップロードする方が簡単です。 しかし、クライアントの各行の整合性を制御するために1行ずつダウンロードすることに興味があり、もちろん、誰もが宣伝するHTML5 FileAPIとドラッグアンドドロップを試してみました。
Excellは、カタログと
Open XML形式の XMLファイルを含むZIPアーカイブ
です 。 JQueryはXMLの解析に優れていますが、zippyはありません。 これを行うために、zip.jsライブラリがネットワークの広大な場所で見つかりました。これは素晴らしい仕事をしました。
それでは、アーカイブの内容を見てみましょう。
<div class="main"> <progress id="progress"></progress> <div class="filedrag" id="comps"> <span class="red"></span></div> <div class="result"></div> </div>
var c = document.getElementById("comps"), FileDragHover = function (e) { e.stopPropagation(); e.preventDefault(); if(e.target.id==='comps') e.target.className = (e.type == "dragover" ? "filedrag hover" : "filedrag"); else c.className = (e.type == "dragover" ? "filedrag hover" : "filedrag"); } c.addEventListener("drop", function(e){ e.preventDefault(); c.className = "filedrag"; var files = e.target.files || e.dataTransfer.files; for (var i = 0, f; f = files[i]; i++) { if(f.name.toLowerCase().indexOf('xlsx')<=0) { alert(' Excel'); } else { zip.createReader(new zip.BlobReader(f), function(reader) {
結果は
ここで見ることができ
ます 。 サンプルファイルをダウンロードし、フォームにドラッグします。
すべてのExcelブックアーカイブファイルのリストがコンソールに表示されます。 コンソールに表示されたオブジェクトのプロパティには、ファイル名があります。ファイル名を使用して、必要なXMLファイルを探します。
アーカイブから2つのファイルが必要になります。
- import.xlsx \ xl \ worksheets \ sheet [N] .xlsx
- import.xlsx \ xl \ sharedStrings.xml
ここで:
sheet [N] .xlsx-実際のExcelシート、N-ブックの内部番号。
sharedStrings.xml-連想配列の文字列、シートの辞書。
必要なファイルのみを除外します。
ファイルをアップロードしてコンソールを見ると、
ここで結果を見ることができます。
次に、単純なセレクターでデータを抽出する必要があります。文字列辞書の場合は
st t 、シート上のデータのあるテーブルエントリの場合は
sheetdata rowです。
Excelシートのデータを表示する関数を追加します。
printExcelData = function(sheets, strings) { var unzipProgress = document.getElementById("progress"); unzipProgress.style.display='block'; strings.getData(new zip.TextWriter(), function(text) {
ChromeはクロスドメインでHTML File APIを使用することは犯罪であると見なしているため(
Uncaught SecurityError:ユーザーエージェントのセキュリティポリシーを突破しようとしました。 )、最後の例を
Webサーバーにアップロードしました。
ファイルをドラッグして、標準のHTMLテーブルを取得します。
PS
はい、今では判明したように、
JavaScript用のOpen XML SDKがありますが、これは別の記事のトピックです...