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

推薦する

iframe に関するいくつかの発見と考察

この物語は、今日の予期せぬ発見から始まります。同社には複数のウェブサイトがある。友達リンクにはお互い...

MySQL sql_mode の変更が有効にならない理由と解決策

目次序文シナリオシミュレーション要約する序文最近、sql_mode の話題については何度も話し合われ...

Linux ipcsコマンドの使用

1. コマンドの紹介ipcs コマンドは、Linux のプロセス間通信機能の状態を報告するために使用...

10分で始めるCSS3アニメーション

導入アニメーションを使用すると、JavaScript や jQuery に依存せずに、純粋な CSS...

TypeScript デコレータ定義

目次1. コンセプト1.1 定義1.2 デコレータファクトリー1.3 デコレータの組み合わせ1.4 ...

Vueフロントエンドパッケージングの詳細なプロセス

目次1. パッケージ化コマンドを追加する2. パッケージ化されたコードを実行する3. パッケージ化し...

WeChatアプレット認証ログインを処理するエレガントな方法

序文WeChat ミニプログラム プロジェクトでユーザー情報を取得し、ユーザー ログインを実装する場...

JavaScript でカルーセル効果を実装する

この記事では、カルーセルの効果を実現するためのJavaScriptの具体的なコードを参考までに共有し...

InnoDB タイプの MySql によるテーブル構造とデータの復元

前提条件: データベースを復元するために必要な .frm ファイルと .ibd ファイルを保存します...

jsonファイルの書き方の詳細説明

目次JSONとはなぜこの技術なのでしょうか? JSONの使い方- データ形式- メモ- JSには2つ...

テキストエリアをレイアウトしたときにテキストが左下にあり、サイズを変更できない問題の解決策

2つの小さな問題ですが、長い間私を悩ませていました。最初の質問テキストエリアの左側のテキストは常にテ...

Vue3+Element+Tsは、フォームの基本的な検索リセットやその他の機能を実装します

Vue2 の記述スタイルから Vue3 の形式に切り替えると、記述スタイルとコード構造にいくつかの変...

Vue でフルスクリーンを実装し、フルスクリーン終了を監視する

目次序文:実装手順:完全なソースコード:詳細情報:序文: vueでは、デフォルトページを実装し、di...

Linux 上の Nginx に複数のバージョンの PHP をインストールする

サーバーの LNPM 環境をインストールして構成する場合、複数のバージョンの PHP の共存を考慮す...

Linux での MySQL 8.0.11 のインストールに関するチュートリアル

1. 公式サイトにアクセスしてインストールパッケージをダウンロードしますダウンロードリンク: クリッ...