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

推薦する

MySQLが数十億のトラフィックをサポートする方法

目次1 マスター・スレーブの読み取り・書き込み分離1.1 コア2 マスタースレーブレプリケーション2...

HTML タグ マーキーはさまざまなスクロール効果を実現します (JS 制御なし)

ページの自動スクロール効果は JavaScript で実現できますが、今日偶然、JS 制御なしでさま...

MySQL 5.7 でパスワードを変更するときに発生する ERROR 1054 (42S22) の解決方法

MySQL 5.7 を新しくインストールしました。ログインすると、パスワードが間違っているというメッ...

回転灯効果を実現するWeChatアプレットの例

序文日常の開発では、テキストの水平スクロール効果(一般にカルーセルと呼ばれる)によく遭遇します。これ...

ウェブサイトのホームページを作成するための基本原則

1. ウェブサイトのホームページのハイパーテキスト ドキュメントの構成構造は、ユーザーの注意をできる...

ミニプログラムは、カスタムのマルチレベル単一選択と複数選択を実装します

この記事では、参考のために、ミニプログラムでカスタムのマルチレベル単一選択および複数選択機能を実装す...

MySQLで判定文を書く方法のまとめ

MySQL で判断文を書く方法:方法1. CASE関数case関数の構文: CASE条件 値1の場合...

Navicatを使ってMySQLを操作する方法

目次序文: 1. Navicatの紹介2. シンプルなチュートリアルの共有接続管理ライブラリテーブル...

CSS コード省略 div+css レイアウト コード省略仕様

略語を使用すると、CSS ファイルのサイズが小さくなり、読みやすくなります。 CSS 省略形の主なル...

axiosのシンプルなカプセル化と使用例コード

序文最近、プロジェクトを構築しているときに、リクエストのカプセル化について考え、どのようにカプセル化...

エラー 1862 (HY000): パスワードの有効期限が切れています。ログインするには、..... を使用してパスワードを変更する必要があります。

エラーメッセージ:エラー 1862 (HY000): パスワードの有効期限が切れています。ログインす...

BFCとは何ですか? CSS 疑似要素を使用してフロートをクリアする方法

BFCコンセプト:ブロック フォーマット コンテキストは、BFC 内の要素を外部の要素から分離する独...

Docker での Redis のマスタースレーブ構成チュートリアルの詳細説明

1. Redisイメージを取得するdocker pull redis 2. それぞれポート6379、...

Mysqlのprepare前処理の具体的な使用法

目次1. 前処理2. 前処理塗布方法A. 例: B. 実行計画の変更を追跡するための前処理C. スト...

Homebrewを使用してMacにMySQLをインストールするときにログインできない問題を解決する

お使いのコンピュータが Mac の場合、homebrew を使用して MySQL をインストールする...