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

推薦する

Vuex全体のケースの詳細な説明

目次1. はじめに2. 利点3. 使用手順1. Vuexをインストールする2. Vuexを参照する3...

insert と select を組み合わせて、「データベース内のフィールドの最大値 + 1 を挿入する」メソッドを実装する

この記事はmysqlデータベースです質問 1 表 1 のデータを表 2 にインポートします。表 1 ...

MySQL 5.7.18 マスタースレーブレプリケーション設定(マスター 1 台とスレーブ 1 台)チュートリアルの詳細な説明

1. 複製原理マスター サーバーはバイナリ ログ ファイルに更新を書き込み、ログのローテーションを追...

yum から docker インストール パッケージをダウンロードし、オフライン マシンにインストールする例の詳細なコード

1. ネットワークマシンでは、デフォルトのcentosyumソースを使用します [root@kole...

LinuxカーネルとSVNバージョン間の競合の解決策

現象システムは Linux システムカーネルを正常にコンパイルできましたが、SVN をインストールし...

MySQL でテーブルスペースの断片化を解消する詳細な例

MySQL でテーブルスペースの断片化を解消する詳細な例断片化の原因(1)テーブルのストレージは断片...

MySQL マルチテーブル結合入門チュートリアル

接続は、実際の外部キー(人工的に作成された 2 つのテーブル間の対応関係を指します。対照的に、FOR...

CentOS7にJDK8をrpmモードでインストールする

CentOS 7が正常にインストールされると、OpenJDKのJREがデフォルトでインストールされて...

sqlとmysqlの違いは何ですか?

SQL とは何ですか? SQL はデータベースを操作するために使用される言語です。 SQL はすべ...

ブラインドの特殊効果を実現するネイティブJS

この記事では、ネイティブ JS で実装されたブラインドの特殊効果を紹介します。効果は次のとおりです。...

美しいHTMLコードの書き方

美しい HTML コードの外観 美しい HTML コードの書き方。外国人が書いた記事: 美しい HT...

MYSQL ローカルインストールと問題解決

序文この記事はかなり詳細で、少し面倒です。他のチュートリアル ドキュメントでは多くの手順が省略されて...

Vue フロントエンド開発における keepAlive の使用方法の詳細な説明

目次序文keep-avlive フック関数keep-avliveはどのコンポーネントをキャッシュする...

echarts ワードクラウドチャートを使用した Vue の実践記録

echartsワードクラウドはechartsの拡張版ですhttps://echarts.apache...

Vue ディレクティブ v-html と v-text

目次1. v-text テキストレンダリング命令2. v-html 1. v-text テキストレン...