1. 程式人生 > 其它 >Excel表格下載和讀取

Excel表格下載和讀取

SheetJS js-xlsx 的使用

js-xlsx 官方文件:https://sheetjs.gitbooks.io/docs/#sheetjs-js-xlsx
https://docs.sheetjs.com/#sheetjs-js-xlsx

npm xlsx地址:https://www.npmjs.com/package/xlsx

官網:https://sheetjs.com/opensource

npm install file-saver --save
npm install @types/file-saver --save-dev
npm install xlsx --save
<!-- <button mat-raised-button color="primary" (click)="exportTable()">匯出</button> -->
<button type="button" class="btn btn-sm btn-success" (click)="exportTable()">匯出2</button>
<!-- <div id="exportableTable" class="hidden-table">
    <table>
        <thead>
            <tr>
                <th>就好多了</th>
                <th>就好多了</th>
                <th>就好多了</th>
                <th>就好多了</th>
                <th>就好多了</th>
                <th>就好多了</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td>大家儘快</td>
                <td>大家儘快</td>
                <td>大家儘快</td>
                <td>大家儘快</td>
                <td>大家儘快</td>
                <td>大家儘快</td>
            </tr>
            <tr>
                <td>大家儘快</td>
                <td>大家儘快</td>
                <td>大家儘快</td>
                <td>大家儘快</td>
                <td>大家儘快</td>
                <td>大家儘快</td>
            </tr>
        </tbody>
    </table>
</div> -->
import { Component, OnInit } from '@angular/core';
import * as FileSaver from 'file-saver';
import { saveAs } from "file-saver";
import * as XLSX from 'xlsx';
@Component({
  selector: 'app-history',
  templateUrl: './history.component.html',
  styleUrls: ['./history.component.scss']
})
export class HistoryComponent implements OnInit {
  constructor() { }
  ngOnInit(): void {}
  // exportTable() {
  //   const blob = new Blob([document.getElementById('exportableTable').innerHTML], {
  //     type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8"
  //   });
  //   saveAs(blob, 'test.xls');
  // }


  jsonData: any = [
    {
      "姓名": "張三",
      "工號": "22",
      "英文名": "zhangsan",
      "部門": "技術部",
      "性別": "男",
      "手機": "15177641999",
      "個人郵箱": "[email protected]"
    }, {
      "姓名": "李四",
      "工號": "33",
      "英文名": "李四",
      "部門": "人事部",
      "性別": "女",
      "手機": "15177641988",
      "個人郵箱": "[email protected]"
    }];

exportTable() {
    const exportItem = this.jsonData;
    const worksheet: XLSX.WorkSheet = XLSX.utils.json_to_sheet(exportItem);
    console.log("worksheet",worksheet)
    const workbook: XLSX.WorkBook = { Sheets: { 'data': worksheet }, SheetNames: ['data'] };
    console.log("workbook",workbook)
    const excelBuffer: any = XLSX.write(workbook, { bookType: 'xlsx', type: 'array' });
    console.log("excelBuffer",excelBuffer)
    this.saveAsExcelFile(excelBuffer, 'report');
}

private saveAsExcelFile(buffer: any, fileName: string) {
  const data: Blob = new Blob([buffer], {
    type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8'
  });
  FileSaver.saveAs(data, fileName + '.xlsx');
}
}

https://www.cnblogs.com/lvsk/p/11970747.html

exportExcle() {

       // 使用 XLSX.utils.aoa_to_sheet(excleData);
        // const excleData = [
        //     ['週一', '週二', '週三', '週四', '週五'],
        //     ['語文', '數學', '歷史', '政治', '英語'],
        //     ['數學', '數學', '政治', '英語', '英語'],
        //     ['政治', '英語', '歷史', '政治', '數學'],
        // ];

       // 使用 XLSX.utils.json_to_sheet(excleData);
        const excleData = [
            {週一: '語文', 週二: '數學', 週三: '歷史', 週四: '政治', 週五: '英語'},
            {週一: '數學', 週二: '數學', 週三: '政治', 週四: '英語', 週五: '英語'},
            {週一: '政治', 週二: '英語', 週三: '歷史', 週四: '政治', 週五: '數學'},
        ];

        // 設定表格樣式,!cols為列寬
        const options = {
          '!cols': [
                { wpx: 100 },
                { wpx: 100 },
                { wpx: 100 },
                { wpx: 100 },
                { wpx: 100 },
        ]};
       // 製作工作表的方式有很多種,以陣列和物件為例
        // const worksheet: XLSX.WorkSheet = XLSX.utils.aoa_to_sheet(excleData);
        const worksheet: XLSX.WorkSheet = XLSX.utils.json_to_sheet(excleData);

       // 使用指定的單元格作為起點插入資料,r:行, c:列,詳情看官網文件
        // XLSX.utils.sheet_add_aoa(worksheet, [[“數學”,“語文”], [“政治”,“語文”], [“歷史”,“政治”], ], {origin: {r: 2, c: 5}});
        worksheet['!cols'] = options['!cols'];

        // 新建一個工作簿
        const workbook: XLSX.WorkBook = XLSX.utils.book_new();

        /* 將工作表新增到工作簿*/
        XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1');
        /* 輸出工作表, 由檔名決定的輸出格式*/
        XLSX.writeFile(workbook, '排庭表.xlsx');
    }

ExcelJS

https://github.com/exceljs/exceljs/blob/master/README_zh.md
https://github.com/exceljs/exceljs

import { AfterViewInit, Component, ElementRef, EmbeddedViewRef, OnInit, TemplateRef, ViewChild, ViewContainerRef } from '@angular/core';
import * as FileSaver from 'file-saver';
import { saveAs } from "file-saver";
import * as XLSX from 'xlsx';
import * as Excel from 'exceljs';
@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent implements OnInit {

  constructor() { }

  ngOnInit(): void {
    this.exportExcle()
  }

  exportExcle() {

    const excleData = [
      ['週一', '週二'],
      ['語文', '數學'],
      ['數學', '英語'],
    ];
    const workbook = new Excel.Workbook();
    const sheet = workbook.addWorksheet('Sheet1');
    sheet.addRows(excleData);
    sheet.eachRow((row, rowNumber) => {
      row.eachCell((cell, colNumber) => {
        // 對齊樣式
        if (rowNumber === 1 || colNumber === 1) {
          cell.alignment = { vertical: 'middle', horizontal: 'center', wrapText: true };
        } else {
          cell.alignment = { vertical: 'top', horizontal: 'left', wrapText: true };
        }
        // 邊框
        cell.border = {
          top: { style: 'thin' },
          left: { style: 'thin' },
          bottom: { style: 'thin' },
          right: { style: 'thin' },
        };
        // 設定列寬
        sheet.getColumn(colNumber).width = 25;
        // sheet.getColumn(colNumber).width = 25;
      });
    });
    sheet.getRow(1).height = 30;
    workbook.xlsx.writeBuffer()
      .then((buffer) => {
        // done
        this.saveAsExcelFile(buffer, '課表');
      });
  }
  saveAsExcelFile(buffer: any, fileName: string) {
    const data: Blob = new Blob([buffer], {
      type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8'
    });
    FileSaver.saveAs(data, fileName + '.xlsx');
  }

}