js 導出到excel

来源:http://www.cnblogs.com/zhj-Acmen/archive/2017/06/14/7010326.html
-Advertisement-
Play Games

轉自:http://www.cnblogs.com/guohu/archive/2013/05/22/3092383.html /* * 預設轉換實現函數,如果需要其他功能,需自行擴展* 參數:* tableID : HTML中Table對象id屬性值* 詳細用法參見以下 TableToExcel ...


轉自:http://www.cnblogs.com/guohu/archive/2013/05/22/3092383.html

/* 
* 預設轉換實現函數,如果需要其他功能,需自行擴展
* 參數:
* tableID : HTML中Table對象id屬性值
* 詳細用法參見以下 TableToExcel 對象定義 
*/
function saveAsExcel(tableID) {
    var tb = new TableToExcel(tableID);
    tb.setFontStyle("Courier New");
    tb.setFontSize(10);
    tb.setTableBorder(2);
    tb.setColumnWidth(7);
    tb.isLineWrap(true);
    tb.getExcelFile();
}

/*
* 功能:HTML中Table對象轉換為Excel通用對象.
* 參數:tableID HTML中Table對象的ID屬性值
* 說明:
* 能適應複雜的HTML中Table對象的自動轉換,能夠自動根據行列擴展信息
* 合併Excel中的單元格,客戶端需要安裝有Excel
* 詳細的屬性、方法引用說明參見:Excel的Microsoft Excel Visual Basic參考
* 示範:
* var tb = new TableToExcel('demoTable');
* tb.setFontStyle("Courier New");
* tb.setFontSize(10); //推薦取值10
* tb.setFontColor(6); //一般情況不用設置
* tb.setBackGround(4); //一般情況不用設置
* tb.setTableBorder(2); //推薦取值2
* tb.setColumnWidth(10); //推薦取值10
* tb.isLineWrap(false);
* tb.isAutoFit(true);
* 
* tb.getExcelFile();
* 如果設置了單元格自適應,則設置單元格寬度無效
* 版本:1.0
* BUG提交:QQ:18234348 或者 http://jeva.bokee.com
*/
function TableToExcel(tableID) {
    this.tableBorder = -1; //邊框類型,-1沒有邊框 可取1/2/3/4
    this.backGround = 0; //背景顏色:白色 可取調色板中的顏色編號 1/2/3/4....
    this.fontColor = 1; //字體顏色:黑色
    this.fontSize = 10; //字體大小
    this.fontStyle = "宋體"; //字體類型
    this.rowHeight = -1; //行高
    this.columnWidth = -1; //列寬
    this.lineWrap = true; //是否自動換行
    this.textAlign = -4108; //內容對齊方式 預設為居中
    this.autoFit = false; //是否自適應寬度
    this.tableID = tableID;
}

TableToExcel.prototype.setTableBorder = function (excelBorder) {
    this.tableBorder = excelBorder;
};

TableToExcel.prototype.setBackGround = function (excelColor) {
    this.backGround = excelColor;
};

TableToExcel.prototype.setFontColor = function (excelColor) {
    this.fontColor = excelColor;
};

TableToExcel.prototype.setFontSize = function (excelFontSize) {
    this.fontSize = excelFontSize;
};

TableToExcel.prototype.setFontStyle = function (excelFont) {
    this.fontStyle = excelFont;
};

TableToExcel.prototype.setRowHeight = function (excelRowHeight) {
    this.rowHeight = excelRowHeight;
};

TableToExcel.prototype.setColumnWidth = function (excelColumnWidth) {
    this.columnWidth = excelColumnWidth;
};

TableToExcel.prototype.isLineWrap = function (lineWrap) {
    if (lineWrap == false || lineWrap == true) {
        this.lineWrap = lineWrap;
    }
};

TableToExcel.prototype.setTextAlign = function (textAlign) {
    this.textAlign = textAlign;
};

TableToExcel.prototype.isAutoFit = function (autoFit) {
    if (autoFit == true || autoFit == false)
        this.autoFit = autoFit;
}
//文件轉換主函數
TableToExcel.prototype.getExcelFile = function () {
    var jXls, myWorkbook, myWorksheet, myHTMLTableCell, myExcelCell, myExcelCell2;
    var myCellColSpan, myCellRowSpan;

    try {
        jXls = new ActiveXObject('Excel.Application');
    }
    catch (e) {
        alert("無法啟動Excel!\n\n" + e.message +
"\n\n如果您確信您的電腦中已經安裝了Excel," +
"那麼請調整IE的安全級別。\n\n具體操作:\n\n" +
"工具 → Internet選項 → 安全 → 自定義級別 → 對沒有標記為安全的ActiveX進行初始化和腳本運行 → 啟用");
        return false;
    }

    jXls.Visible = true;
    myWorkbook = jXls.Workbooks.Add();
    jXls.DisplayAlerts = false;
    myWorkbook.Worksheets(3).Delete();
    myWorkbook.Worksheets(2).Delete();
    jXls.DisplayAlerts = true;
    myWorksheet = myWorkbook.ActiveSheet;

    var readRow = 0, readCol = 0;
    var totalRow = 0, totalCol = 0;
    var tabNum = 0;

    //設置行高、列寬
    if (this.columnWidth != -1)
        myWorksheet.Columns.ColumnWidth = this.columnWidth;
    else
        myWorksheet.Columns.ColumnWidth = 7;
    if (this.rowHeight != -1)
        myWorksheet.Rows.RowHeight = this.rowHeight;

    //搜索需要轉換的Table對象,獲取對應行、列數
    var obj = document.all.tags("table");
    for (x = 0; x < obj.length; x++) {
        if (obj[x].id == this.tableID) {
            tabNum = x;
            totalRow = obj[x].rows.length;
            for (i = 0; i < obj[x].rows[0].cells.length; i++) {
                myHTMLTableCell = obj[x].rows(0).cells(i);
                myCellColSpan = myHTMLTableCell.colSpan;
                totalCol = totalCol + myCellColSpan;
            }
        }
    }

    //開始構件模擬表格
    var excelTable = new Array();
    for (i = 0; i <= totalRow; i++) {
        excelTable[i] = new Array();
        for (t = 0; t <= totalCol; t++) {
            excelTable[i][t] = false;
        }
    }

    //開始轉換表格 
    for (z = 0; z < obj[tabNum].rows.length; z++) {
        readRow = z + 1;
        readCol = 0;
        for (c = 0; c < obj[tabNum].rows(z).cells.length; c++) {
            myHTMLTableCell = obj[tabNum].rows(z).cells(c);
            myCellColSpan = myHTMLTableCell.colSpan;
            myCellRowSpan = myHTMLTableCell.rowSpan;
            for (y = 1; y <= totalCol; y++) {
                if (excelTable[readRow][y] == false) {
                    readCol = y;
                    break;
                }
            }
            if (myCellColSpan * myCellRowSpan > 1) {
                myExcelCell = myWorksheet.Cells(readRow, readCol);
                myExcelCell2 = myWorksheet.Cells(readRow + myCellRowSpan - 1, readCol + myCellColSpan - 1);
                myWorksheet.Range(myExcelCell, myExcelCell2).Merge();
                myExcelCell.HorizontalAlignment = this.textAlign;
                myExcelCell.Font.Size = this.fontSize;
                myExcelCell.Font.Name = this.fontStyle;
                myExcelCell.wrapText = this.lineWrap;
                myExcelCell.Interior.ColorIndex = this.backGround;
                myExcelCell.Font.ColorIndex = this.fontColor;
                if (this.tableBorder != -1) {
                    myWorksheet.Range(myExcelCell, myExcelCell2).Borders(1).Weight = this.tableBorder;
                    myWorksheet.Range(myExcelCell, myExcelCell2).Borders(2).Weight = this.tableBorder;
                    myWorksheet.Range(myExcelCell, myExcelCell2).Borders(3).Weight = this.tableBorder;
                    myWorksheet.Range(myExcelCell, myExcelCell2).Borders(4).Weight = this.tableBorder;
                }

                myExcelCell.Value = myHTMLTableCell.innerText;
                for (row = readRow; row <= myCellRowSpan + readRow - 1; row++) {
                    for (col = readCol; col <= myCellColSpan + readCol - 1; col++) {
                        excelTable[row][col] = true;
                    }
                }

                readCol = readCol + myCellColSpan;
            } else {
                myExcelCell = myWorksheet.Cells(readRow, readCol);
                myExcelCell.Value = myHTMLTableCell.innerText;
                myExcelCell.HorizontalAlignment = this.textAlign;
                myExcelCell.Font.Size = this.fontSize;
                myExcelCell.Font.Name = this.fontStyle;
                myExcelCell.wrapText = this.lineWrap;
                myExcelCell.Interior.ColorIndex = this.backGround;
                myExcelCell.Font.ColorIndex = this.fontColor;
                if (this.tableBorder != -1) {
                    myExcelCell.Borders(1).Weight = this.tableBorder;
                    myExcelCell.Borders(2).Weight = this.tableBorder;
                    myExcelCell.Borders(3).Weight = this.tableBorder;
                    myExcelCell.Borders(4).Weight = this.tableBorder;
                }
                excelTable[readRow][readCol] = true;
                readCol = readCol + 1;
            }
        }
    }
    if (this.autoFit == true)
        myWorksheet.Columns.AutoFit;

    jXls.UserControl = true;
    jXls = null;
    myWorkbook = null;
    myWorksheet = null;
};

 

/* * 預設轉換實現函數,如果需要其他功能,需自行擴展* 參數:* tableID : HTML中Table對象id屬性值* 詳細用法參見以下 TableToExcel 對象定義 */function saveAsExcel(tableID) {    var tb = new TableToExcel(tableID);    tb.setFontStyle("Courier New");    tb.setFontSize(10);    tb.setTableBorder(2);    tb.setColumnWidth(7);    tb.isLineWrap(true);    tb.getExcelFile();}
/** 功能:HTML中Table對象轉換為Excel通用對象.* 參數:tableID HTML中Table對象的ID屬性值* 說明:* 能適應複雜的HTML中Table對象的自動轉換,能夠自動根據行列擴展信息* 合併Excel中的單元格,客戶端需要安裝有Excel* 詳細的屬性、方法引用說明參見:Excel的Microsoft Excel Visual Basic參考* 示範:* var tb = new TableToExcel('demoTable');* tb.setFontStyle("Courier New");* tb.setFontSize(10); //推薦取值10* tb.setFontColor(6); //一般情況不用設置* tb.setBackGround(4); //一般情況不用設置* tb.setTableBorder(2); //推薦取值2* tb.setColumnWidth(10); //推薦取值10* tb.isLineWrap(false);* tb.isAutoFit(true);* * tb.getExcelFile();* 如果設置了單元格自適應,則設置單元格寬度無效* 版本:1.0* BUG提交:QQ:18234348 或者 http://jeva.bokee.com*/function TableToExcel(tableID) {    this.tableBorder = -1; //邊框類型,-1沒有邊框 可取1/2/3/4    this.backGround = 0; //背景顏色:白色 可取調色板中的顏色編號 1/2/3/4....    this.fontColor = 1; //字體顏色:黑色    this.fontSize = 10; //字體大小    this.fontStyle = "宋體"; //字體類型    this.rowHeight = -1; //行高    this.columnWidth = -1; //列寬    this.lineWrap = true; //是否自動換行    this.textAlign = -4108; //內容對齊方式 預設為居中    this.autoFit = false; //是否自適應寬度    this.tableID = tableID;}
TableToExcel.prototype.setTableBorder = function (excelBorder) {    this.tableBorder = excelBorder;};
TableToExcel.prototype.setBackGround = function (excelColor) {    this.backGround = excelColor;};
TableToExcel.prototype.setFontColor = function (excelColor) {    this.fontColor = excelColor;};
TableToExcel.prototype.setFontSize = function (excelFontSize) {    this.fontSize = excelFontSize;};
TableToExcel.prototype.setFontStyle = function (excelFont) {    this.fontStyle = excelFont;};
TableToExcel.prototype.setRowHeight = function (excelRowHeight) {    this.rowHeight = excelRowHeight;};
TableToExcel.prototype.setColumnWidth = function (excelColumnWidth) {    this.columnWidth = excelColumnWidth;};
TableToExcel.prototype.isLineWrap = function (lineWrap) {    if (lineWrap == false || lineWrap == true) {        this.lineWrap = lineWrap;    }};
TableToExcel.prototype.setTextAlign = function (textAlign) {    this.textAlign = textAlign;};
TableToExcel.prototype.isAutoFit = function (autoFit) {    if (autoFit == true || autoFit == false)        this.autoFit = autoFit;}//文件轉換主函數TableToExcel.prototype.getExcelFile = function () {    var jXls, myWorkbook, myWorksheet, myHTMLTableCell, myExcelCell, myExcelCell2;    var myCellColSpan, myCellRowSpan;
    try {        jXls = new ActiveXObject('Excel.Application');    }    catch (e) {        alert("無法啟動Excel!\n\n" + e.message +"\n\n如果您確信您的電腦中已經安裝了Excel," +"那麼請調整IE的安全級別。\n\n具體操作:\n\n" +"工具 → Internet選項 → 安全 → 自定義級別 → 對沒有標記為安全的ActiveX進行初始化和腳本運行 → 啟用");        return false;    }
    jXls.Visible = true;    myWorkbook = jXls.Workbooks.Add();    jXls.DisplayAlerts = false;    myWorkbook.Worksheets(3).Delete();    myWorkbook.Worksheets(2).Delete();    jXls.DisplayAlerts = true;    myWorksheet = myWorkbook.ActiveSheet;
    var readRow = 0, readCol = 0;    var totalRow = 0, totalCol = 0;    var tabNum = 0;
    //設置行高、列寬    if (this.columnWidth != -1)        myWorksheet.Columns.ColumnWidth = this.columnWidth;    else        myWorksheet.Columns.ColumnWidth = 7;    if (this.rowHeight != -1)        myWorksheet.Rows.RowHeight = this.rowHeight;
    //搜索需要轉換的Table對象,獲取對應行、列數    var obj = document.all.tags("table");    for (x = 0; x < obj.length; x++) {        if (obj[x].id == this.tableID) {            tabNum = x;            totalRow = obj[x].rows.length;            for (i = 0; i < obj[x].rows[0].cells.length; i++) {                myHTMLTableCell = obj[x].rows(0).cells(i);                myCellColSpan = myHTMLTableCell.colSpan;                totalCol = totalCol + myCellColSpan;            }        }    }
    //開始構件模擬表格    var excelTable = new Array();    for (i = 0; i <= totalRow; i++) {        excelTable[i] = new Array();        for (t = 0; t <= totalCol; t++) {            excelTable[i][t] = false;        }    }
    //開始轉換表格     for (z = 0; z < obj[tabNum].rows.length; z++) {        readRow = z + 1;        readCol = 0;        for (c = 0; c < obj[tabNum].rows(z).cells.length; c++) {            myHTMLTableCell = obj[tabNum].rows(z).cells(c);            myCellColSpan = myHTMLTableCell.colSpan;            myCellRowSpan = myHTMLTableCell.rowSpan;            for (y = 1; y <= totalCol; y++) {                if (excelTable[readRow][y] == false) {                    readCol = y;                    break;                }            }            if (myCellColSpan * myCellRowSpan > 1) {                myExcelCell = myWorksheet.Cells(readRow, readCol);                myExcelCell2 = myWorksheet.Cells(readRow + myCellRowSpan - 1, readCol + myCellColSpan - 1);                myWorksheet.Range(myExcelCell, myExcelCell2).Merge();                myExcelCell.HorizontalAlignment = this.textAlign;                myExcelCell.Font.Size = this.fontSize;                myExcelCell.Font.Name = this.fontStyle;                myExcelCell.wrapText = this.lineWrap;                myExcelCell.Interior.ColorIndex = this.backGround;                myExcelCell.Font.ColorIndex = this.fontColor;                if (this.tableBorder != -1) {                    myWorksheet.Range(myExcelCell, myExcelCell2).Borders(1).Weight = this.tableBorder;                    myWorksheet.Range(myExcelCell, myExcelCell2).Borders(2).Weight = this.tableBorder;                    myWorksheet.Range(myExcelCell, myExcelCell2).Borders(3).Weight = this.tableBorder;                    myWorksheet.Range(myExcelCell, myExcelCell2).Borders(4).Weight = this.tableBorder;                }
                myExcelCell.Value = myHTMLTableCell.innerText;                for (row = readRow; row <= myCellRowSpan + readRow - 1; row++) {                    for (col = readCol; col <= myCellColSpan + readCol - 1; col++) {                        excelTable[row][col] = true;                    }                }
                readCol = readCol + myCellColSpan;            } else {                myExcelCell = myWorksheet.Cells(readRow, readCol);                myExcelCell.Value = myHTMLTableCell.innerText;                myExcelCell.HorizontalAlignment = this.textAlign;                myExcelCell.Font.Size = this.fontSize;                myExcelCell.Font.Name = this.fontStyle;                myExcelCell.wrapText = this.lineWrap;                myExcelCell.Interior.ColorIndex = this.backGround;                myExcelCell.Font.ColorIndex = this.fontColor;                if (this.tableBorder != -1) {                    myExcelCell.Borders(1).Weight = this.tableBorder;                    myExcelCell.Borders(2).Weight = this.tableBorder;                    myExcelCell.Borders(3).Weight = this.tableBorder;                    myExcelCell.Borders(4).Weight = this.tableBorder;                }                excelTable[readRow][readCol] = true;                readCol = readCol + 1;            }        }    }    if (this.autoFit == true)        myWorksheet.Columns.AutoFit;
    jXls.UserControl = true;    jXls = null;    myWorkbook = null;    myWorksheet = null;};


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 最近花了差不多1天的時間在折騰一個Bug,該Bug的表象如下: 這個Bug還特別獨特,在開發電腦中無提示,在終端用戶那裡每次使用軟體的時候都報這個。仔細思考了一下最近在源碼中新添加的功能,沒發現有啥特別明顯的問題。於是,根據字面意思的理解是“運行時錯誤”,所以一開始解決這個問題的思路是將所有應用程式 ...
  • 前面寫了一篇shell多進程的文章,多進程實現起來非常簡單,但是當有大量任務,如有一百個很大的日誌文件需要分析 此時若同時並行100個進程,那io肯定要爆,所以必須要控制併發數 linux 有兩種管道:匿名管道和命名管道 匿名管道即常用的'|',命名管道可以使用mkfifo命令創建 管道有一個特性: ...
  • ExtJs2.0好像不支持單選框組,因此用兩個name相同單選框來實現單選框組 var radio1 = new Ext.form.Radio({boxLabel:'男',name:'sex',id:'yes',inputValue:'0',width : 150, height : 20}); v ...
  • Java就是用來做項目的!Java的主要應用領域就是企業級的項目開發!要想從事企業級的項目開發,你必須掌握如下要點: 1、掌握項目開發的基本步驟 2、具備極強的面向對象的分析與設計技巧 3、掌握用例驅動、以架構為核心的主流開發方法 沒有人願意自己一輩子就滿足於掌握了一些代碼實現的技巧,別人告訴你要實 ...
  • 設計此種編碼是為了使二進位數據可以通過非純 8-bit 的傳輸層傳輸,例如電子郵件的內容就是通過base64轉碼後傳輸的。Base64-encoded後, 數據要比原始數據多占用 33% 左右的空間。 利用base64加密文件: 解密base64加密後的文件: 其實上面的操作還算不上加密,只要懂解碼 ...
  • 從現在開始,分享我讀過的技術文章。 ...
  • 一、擴展的功能 1、初始化時,會自動創建一個select標簽; 2、當改變select值時,日期也會自動改變,並且會調用apply按鈕的click事件 3、點擊此處進行預覽 4、github地址:https://github.com/lanleiming/daterangepicker-extend ...
  • [1]crypto [2]MD5 [3]Hmac [4]AES [5]Diffie-Hellman ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...