VueはExcelテーブルをインポートし、インポートに失敗したデータを自動的にダウンロードします。

VueはExcelテーブルをインポートし、インポートに失敗したデータを自動的にダウンロードします。

次のような要件があります: インポート ボタン。ボタンをクリックして Excel テーブルをインポートします。Excel テーブルの一部のデータのインポートに失敗した場合、失敗したデータの Excel テーブルが自動的にダウンロードされます。すべてのデータが正常にインポートされた場合、「インポートは成功しました」というメッセージが表示されます。

まず、ElementUIのアップロードファイルコンポーネントを添付します

Element - 世界で最も人気のあるVue UIフレームワーク

Element は、開発者、デザイナー、製品マネージャー向けの Vue 2.0 ベースのデスクトップ コンポーネント ライブラリです。

https://element.eleme.cn/#/zh-CN/component/upload

uploadコンポーネントの特性や使い方については公式サイトで詳しく紹介されているので、ここでは詳しく説明しません。ここでは主に、最初にExcelテーブルをインポートするという要件を満たすために使用します。 (VueプロジェクトにElementUIライブラリを導入する必要があります。詳しい手順は公式サイトを参照してください)

1. ElementUIアップロードコンポーネントのアップロードを導入する

<el-アップロード
  クラス="アップロードデモ"
  アクション="https://jsonplaceholder.typicode.com/posts/"
  複数
  :自動アップロード="false"
  :file-list="ファイルリスト"
  :on-change="ファイル変更">
  <el-button type="primary">インポート</el-button>
</el-アップロード>

ページ効果

属性の紹介

財産例示するタイプ
アクション必須パラメータ、アップロードアドレス
複数ファイルの複数選択をサポートするかどうかブール値
自動アップロードファイルを選択した後すぐにアップロードするかどうかブール値
自動アップロードを回避し、カスタムアップロード方法を使用できるようにするために、自動アップロードを false に設定します。
ファイルリストアップロードされたファイルのリスト、例: [{name: 'food.jpg', url: 'https://xxx.cdn.com/xxx.jpg'}]配列
変更中ファイルステータスの変更のフック。ファイルの追加時、アップロード成功時、アップロード失敗時に呼び出されます。関数(ファイル、ファイルリスト)

2. インポートボタンをクリックしてファイルを選択します(変更時にトリガーするには「開く」をクリックします)

この時点で、 fileChangeメソッドを使用してコンソールにファイル構造を印刷して表示することができます。

ファイル変更(ファイル、ファイルリスト){
  console.log(ファイル,'ファイル')
  console.log(ファイルリスト、'ファイルリスト')
} 

3. これで、選択したファイルがあり、アップロード方法をカスタマイズしてバックエンドサーバーに送信できます。

ファイル変更(ファイル、ファイルリスト){
  console.log(ファイル,'ファイル')
  console.log(ファイルリスト、'ファイルリスト')
  let url = 'xxx' //バックエンドサーバーAPI
  ヘッダーを{
    'Content-Type':'multipart/form-data' //カスタムアップロードの場合、このリクエストヘッダーパラメータは必須です}
  formData = '' とします
  for(let i = 0;i < fileList.length;i++){ // ファイル配列を走査します。fileList には複数のファイルがある可能性があります。formData = new FormData()
    formData.append('name',fileList[i].name)
    フォームデータ.append('type','.xlsx')
    formData.append('ファイル',fileList[i].raw)
  }
  this.$axios({
    ヘッダー: ヘッダー、
    メソッド: 'post'、
    データ: フォームデータ、
    URL: URL、
    responseType:'blob' //このパラメータは必須です。そうでない場合、ダウンロードした Excel テーブルはファイルが破損しているため開けないというメッセージを表示します}).then(res=>{
    res && res.data.size == 0 の場合{
      //バックグラウンドでストリームが返されない場合は、すべてのデータが正常にインポートされたことを意味し、「インポートが成功しました」というプロンプトが表示されます。戻り値は自動的にダウンロードされません。
    }
    //バックグラウンドがストリームを返す場合、一部のデータのインポートが失敗したことを意味し、失敗したデータの Excel テーブルが自動的にダウンロードされます。let name = 'Import failed data.xlsx' //ダウンロードする Excel テーブル名をカスタマイズします。let blob = new Blob([res.data])
    url = window.URL.createObjectURL(blob) とします。
    aLink = document.createElement('a') とします。
    aLink.style.display = 'なし'
    aLink.href = URL
    //ダウンロード属性はダウンロード リンクのアドレスを定義します。 <a> タグ内に href 属性を指定する必要があります。
    aLink.setAttribute('ダウンロード',名前) 
    document.body.appendChild(リンク)
    リンクをクリックする()
    document.body.removeChild(リンク)
    window.URL.revokeObjectURL(url)
    //ダウンロードが完了した後、リストの更新、フレンドリーなプロンプトなど、他の操作を実行できます。})
}

方法分析

formData 、ajax2.0 (XMLHttpRequest Level2) で提案された新しいインターフェースです。FormData オブジェクトを使用すると、 FormData要素のnamevalueを組み合わせてformデータをシリアル化できるため、フォーム要素を連結して作業効率を向上させることができます。 append FormDataに新しい属性値を追加します。FormData に対応する属性値が存在する場合は元の値が上書きされ、存在しない場合は新しい属性値FormData追加されます。

Blobオブジェクトは、不変の生のファイルのようなオブジェクトを表します。データはテキストまたはバイナリ形式で読み取ることができ、データ操作のためにReadableStreamに変換することもできます。

URL.createObjectURL()静的メソッドは、パラメータとして指定されたオブジェクトを表す URL を含むDOMStringを作成します。この URL のライフサイクルは、それを作成したウィンドウ内のdocumentに関連付けられています。この新しい URL オブジェクトは、指定されたFileオブジェクトまたはBlobオブジェクトを表します。

URL.revokeObjectURL()静的メソッドはURL.createObjectURL()を呼び出して作成された既存の URL オブジェクトを解放するために使用されます。 URL オブジェクトの使用が終了したら、このメソッドを呼び出して、ファイルへの参照をメモリ内に保持する必要がないことをブラウザーに通知する必要があります。

要約: 上記は、Excel テーブルのカスタム インポートを実装し、インターフェイスによって返されるストリームを自動的にダウンロードします。コードは直接使用できますが、返されるデータresponse私のものと同じではない可能性があることに注意してください。詳細については、共同デバッグ インターフェイスの戻りデータを参照してください。

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Vue エクスポート Excel 機能の全プロセス記録
  • Vue で Excel インポート機能を実装する詳細な手順
  • VueにExcelテーブルプラグインを導入する方法
  • Vue で Web ページ データを Excel にエクスポートする方法

<<:  HTML と CSS を書くための 6 つの最も効果的な方法

>>:  CSS3を使って歌詞進行テキストカラー塗りつぶし変更の動的効果を実装するアイデアの詳細な説明

推薦する

JavaScript の for/of、for/in の詳細な紹介

目次JavaScriptでは、 forループを記述する一般的な方法がいくつかあります。最初の、そして...

MySQL ストアド プロシージャと共通関数のコード分析

mysql ストアド プロシージャの概念:特定のタスク (クエリと更新) を実行できる、データベース...

Linux環境にMySQLデータベースをインストールする詳細なチュートリアル

1. データベースをインストールする1) yum -y install mysql-server (...

HTML ページに画像を挿入し、マップ インデックスを追加する方法の例

1. WEBでサポートされている画像形式: GIF: 256色を保存でき、透明色をサポートし、アニメ...

ウェブデザインにおける装飾要素の応用の概要

<br />序文: このチュートリアルを読む前に、序文を注意深く読んでください。そうしな...

JS ES6における構造化分解についてお話しましょう

概要es6 では、配列またはオブジェクトから指定された要素を取得する新しい方法が追加されました。これ...

Unicodeの一般的な記号

Unicode は、世界中のすべてのテキストと記号に対応できる国際組織によって開発された文字エンコー...

HTML フォームタグチュートリアル (4):

ここで、次のような項目をフォームに追加したいとします: 現在いる都市を参照します。ここで私たちが話し...

Linux Crontab シェル スクリプトを使用して第 2 レベルのスケジュールされたタスクを実装する方法

1. シェルスクリプトcrontab.shを書く #!/bin/bash step=1 #ステップ間...

nginx リバース プロキシの魔法のスラッシュについての簡単な説明

nginx リバース プロキシを設定する場合、location と proxy_pass のスラッシ...

Vue+Openlayer で select を使用して要素を選択する実装コード

効果画像: 実装コード: <テンプレート> <div id="map&q...

CSS のマージンの崩壊問題を解決する方法

まず、マージン崩壊が発生する 3 つの状況を見てみましょう。 1. 隣接する 2 つのブロックレベル...

3つの主要データベース(Mysql、SqlServer、Oracle)の違いについて簡単に説明します。

マイグレーションアドバンテージ:小型、高速、総所有コストが低い、オープンソース。複数のオペレーティン...

Dockerカスタムネットワーク実装

目次1. コンテナ相互接続を実現するためにネットワークをカスタマイズする2. ネットワーク接続1. ...

現在のブラウザが JavaScript でヘッドレス ブラウザであるかどうかを検出する方法

目次ヘッドレスブラウザとは何ですか?なぜ「ヘッドレス」ブラウザと呼ばれるのでしょうか?ヘッドレスブラ...