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

推薦する

CSS3 を使用して楕円軌道の回転を実装するサンプルコード

最近、次のような効果を達成する必要がある最初は、CSS3D回転を使用して記述すると、次の効果しか得ら...

Vueは、サイドナビゲーションバーをタブページに関連付けるサンプルコードを実装します。

目次テクノロジースタック効果分析するテクノロジースタックサイドバー用Antdtabは要素を使用します...

UnityはMySQLに接続し、テーブルデータの実装コードを読み取ります

表は以下のとおりです。 Unity が読み取って呼び出すときのコード: データベース内の別のテーブル...

フォーム内の無効なフォームフィールドの値を送信する方法 サンプルコード

フォーム内のフォーム フィールドが無効に設定されている場合、フォーム フィールドの値は送信されません...

Vue はコンポーネント間の通信をどのように実装しますか?

目次1. 父と息子のコミュニケーション1.1 親コンポーネント --> 子コンポーネント1.2...

JSキャンバスは描画ボードと署名ボードの機能を実現します

この記事では、お絵かきボード/サインボード機能を実現するためのJSキャンバスの具体的なコードを参考ま...

Vue で axios を使用して画像をアップロードするときに発生する問題

目次FormDataとは何ですか? vueとaxiosの協力による実践的な体験追加()セット()消去...

docker で Apollo をデプロイする詳細なチュートリアル

1. はじめにここでは apollo について詳しく説明しません。公式サイト https://git...

MySQL (8 および 5.7) の Docker インストール

この記事では、Dockerを使用してMySQLデータベースとリモートアクセス構成をデプロイする方法を...

VueとVueComponentの関係の詳細な説明

次のケースでは、これまでに学んだプロトタイプチェーンの知識ポイントを確認します。 // コンストラク...

HTML 背景画像と背景色_PowerNode Java アカデミー

1. HTML 画像 <img> 1. <img> タグとその src 属性...

角度でechartsマップを使用する詳細な説明

目次echartの初期化アプリベースチャートコンポーネントhtml CS app-base-char...

Nexusプライベートサーバー構築原理とチュートリアル分析

1つ。 Nexus プライベート サーバーを構築する理由は何ですか?社内の開発メンバーは全員外部ネッ...

JavaScriptイベント実行メカニズムの深い理解

目次序文ブラウザJS非同期実行の原理ブラウザのイベントループ実行スタックとタスクキューマクロタスクと...

win10 で mysql8.0.23 をインストールし、「サービスが制御機能に応答しません」という問題を解決する方法

Windows10にmysqlをインストールする1. 公式サイトからMySQLをダウンロードするウェ...