溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Jquery怎么導出帶樣式的Excel

發布時間:2021-07-14 15:06:09 來源:億速云 閱讀:643 作者:chen 欄目:大數據
# jQuery怎么導出帶樣式的Excel

## 前言

在Web開發中,將數據導出為Excel是常見的需求。雖然原生JavaScript可以實現基礎功能,但借助jQuery庫可以更高效地完成復雜操作,特別是需要保留表格樣式時。本文將詳細介紹三種主流方法,并提供完整代碼示例。

## 一、基礎原理與準備工作

### 1.1 Excel文件本質
Excel文件(.xlsx)實際是XML格式的壓縮包,包含多個描述文件:
- `styles.xml` 存儲樣式定義
- `sharedStrings.xml` 存儲文本內容
- `sheet1.xml` 存儲工作表數據

### 1.2 瀏覽器端生成方案
瀏覽器端生成Excel主要依賴:
- **Blob對象**:二進制數據容器
- **URL.createObjectURL()**:創建臨時下載鏈接
- **HTML表格轉換**:將DOM表格轉為Excel格式

### 1.3 所需jQuery插件
推薦使用以下庫簡化開發:
```html
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/exceljs/dist/exceljs.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/file-saver@2.0.5/dist/FileSaver.min.js"></script>

二、方法一:使用tableToExcel插件

2.1 插件介紹

tableToExcel是最簡單的jQuery解決方案,可將HTML表格直接轉為帶基礎樣式的Excel。

2.2 實現步驟

function exportWithTableToExcel() {
  // 克隆表格避免污染原DOM
  const $table = $('#dataTable').clone();
  
  // 添加樣式到克隆表格
  $table.find('tr:first th').css({
    'background-color': '#4CAF50',
    'color': 'white',
    'font-weight': 'bold'
  });

  // 核心導出代碼
  const uri = 'data:application/vnd.ms-excel;base64,';
  const template = `<html xmlns:o="urn:schemas-microsoft-com:office:office" 
    xmlns:x="urn:schemas-microsoft-com:office:excel">
    <head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets>
      <x:ExcelWorksheet><x:Name>{worksheet}</x:Name>
      <x:WorksheetOptions><x:DisplayGridlines/></x:WorksheetOptions>
    </x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]-->
    </head><body><table>{table}</table></body></html>`;
  
  const base64 = function(s) {
    return window.btoa(unescape(encodeURIComponent(s)))
  };
  
  const downloadLink = document.createElement("a");
  downloadLink.href = uri + base64(template.replace(/{table}/g, $table[0].outerHTML));
  downloadLink.download = "styled_data.xls";
  document.body.appendChild(downloadLink);
  downloadLink.click();
  document.body.removeChild(downloadLink);
}

2.3 優缺點分析

  • ? 優點:實現簡單,零依賴
  • ? 缺點:樣式支持有限,生成的是老式.xls格式

三、方法二:SheetJS + jQuery

3.1 SheetJS簡介

SheetJS(xlsx.js)是功能強大的電子表格處理庫,支持高級樣式設置。

3.2 完整實現代碼

function exportWithSheetJS() {
  // 創建工作簿
  const wb = XLSX.utils.book_new();
  
  // 獲取表格數據
  const $table = $('#dataTable');
  const ws = XLSX.utils.table_to_sheet($table[0]);
  
  // 設置樣式
  ws["!cols"] = [
    { width: 15 }, { width: 20 }, 
    { width: 10 }, { width: 15 }
  ];
  
  // 添加工作表
  XLSX.utils.book_append_sheet(wb, ws, "Sheet1");
  
  // 生成Excel文件
  XLSX.writeFile(wb, "styled_report.xlsx", {
    cellStyles: true,
    bookSST: true
  });
}

3.3 高級樣式配置

// 設置單元格樣式
const style = {
  fill: { fgColor: { rgb: "FF00FF00" } },
  font: { bold: true, color: { rgb: "FFFF0000" } },
  border: {
    top: { style: "thin", color: { rgb: "FF000000" } },
    bottom: { style: "thin", color: { rgb: "FF000000" } }
  }
};

ws["A1"].s = style;

四、方法三:ExcelJS專業方案

4.1 ExcelJS優勢

  • 支持現代Excel所有特性
  • 完美兼容jQuery
  • 可生成.xlsx格式

4.2 實現示例

async function exportWithExcelJS() {
  const workbook = new ExcelJS.Workbook();
  const worksheet = workbook.addWorksheet('報表');
  
  // 添加帶樣式標題
  worksheet.addRow(['客戶報表']).font = { 
    size: 16, 
    bold: true,
    color: { argb: 'FF3A7D44' }
  };
  
  // 合并單元格
  worksheet.mergeCells('A1:D1');
  
  // 從jQuery表格導入數據
  $('#dataTable tr').each(function() {
    const rowData = [];
    $(this).find('td, th').each(function() {
      rowData.push($(this).text());
    });
    worksheet.addRow(rowData);
  });
  
  // 設置列樣式
  worksheet.columns.forEach(column => {
    column.width = 20;
    column.alignment = { vertical: 'middle', horizontal: 'center' };
  });
  
  // 生成文件
  const buffer = await workbook.xlsx.writeBuffer();
  saveAs(new Blob([buffer]), "professional_report.xlsx");
}

五、樣式深度定制技巧

5.1 條件格式設置

// 使用ExcelJS設置條件格式
worksheet.addConditionalFormatting({
  ref: 'B2:B100',
  rules: [
    {
      type: 'cellIs',
      operator: 'greaterThan',
      formulae: [1000],
      style: { fill: { type: 'pattern', pattern:'solid', fgColor: { argb:'FFFF0000' } } }
    }
  ]
});

5.2 響應式表格處理

// 根據屏幕寬度調整導出列數
function getExportColumns() {
  const isMobile = window.innerWidth < 768;
  return isMobile ? ['name', 'phone'] : ['id', 'name', 'email', 'phone', 'address'];
}

六、瀏覽器兼容性方案

6.1 多方案兼容實現

function universalExport() {
  try {
    if(typeof ExcelJS !== 'undefined') {
      exportWithExcelJS();
    } else if(typeof XLSX !== 'undefined') {
      exportWithSheetJS();
    } else {
      exportWithTableToExcel();
    }
  } catch(e) {
    alert(`導出失敗: ${e.message}`);
  }
}

七、完整示例項目

7.1 HTML結構

<table id="dataTable" class="table">
  <thead>
    <tr><th>ID</th><th>姓名</th><th>銷售額</th><th>地區</th></tr>
  </thead>
  <tbody>
    <!-- 動態數據通過jQuery加載 -->
  </tbody>
</table>

<button id="exportBtn" class="btn btn-success">導出Excel</button>

7.2 jQuery數據加載

$(document).ready(function() {
  // 模擬AJAX數據加載
  const mockData = [
    {id: 1, name: '張三', sales: 3580, region: '華東'},
    {id: 2, name: '李四', sales: 4200, region: '華北'}
  ];
  
  const $tbody = $('#dataTable tbody');
  mockData.forEach(item => {
    $tbody.append(
      `<tr>
        <td>${item.id}</td>
        <td class="text-primary">${item.name}</td>
        <td>¥${item.sales.toFixed(2)}</td>
        <td>${item.region}</td>
      </tr>`
    );
  });
  
  // 綁定導出事件
  $('#exportBtn').click(universalExport);
});

結語

本文詳細介紹了三種jQuery導出帶樣式Excel的方案,開發者可根據項目需求選擇: 1. 簡單場景使用tableToExcel 2. 中等復雜度選擇SheetJS 3. 企業級應用推薦ExcelJS

建議在實際項目中添加加載狀態提示和錯誤處理,完整的示例代碼已托管在GitHub倉庫。 “`

注:實際使用時請注意: 1. 各方案需要引入對應的JS庫 2. 現代瀏覽器推薦使用Promise/async語法 3. 企業級應用建議增加服務器端驗證

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女