就是博客
If you think you can, you can!

IE嵌入excel文档

 

需要在IE中嵌入excel文档(xls), 可用于解决在IE中一次性显示大量表格数据(10万个单元格以上)造成的性能问题, 经测试可以有2种方式, 如有可能的话, 还可以借用第3方服务, 如Google Docs或Microsoft SkyDrive Microsoft Excel Web App

1. 通过iframe方式嵌入
    主要是利用IE可以直接调用关联程序打开对应格式的文档, 如调用pdf阅读器在IE中直接打开pdf.
    excel也是一样, 可以直接通过IE打开本地或远程的excel文件, 通过拖拽(或从IE菜单中选择文件-打开)excel文件到IE可以打开本地文件.
    但一般通过网络会采用iframe的方式来嵌入文件, 让IE自动通过关联软件打开文件
    例如:
<iframe width="100%" height="100%" src="http://218.75.61.130/media_file/2005_10_29/20051029213808.xls" />



    参考
    ------
    请问如何在网页中嵌入Excel
    2003版的默认是在iframe里面打开的, 除非客户更改了设置
    2007版的要修改注册表(BrowserFlag)

    Internet Explorer 中编辑 OLE 嵌入文档
    HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Excel.Sheet.8
    修改 BrowserFlags 为 0

2. 通过ActiveX控件(OWC)方式嵌入
    主要是利用微软的OWC组件(Microsoft Office Web Components)来打开excel
    客户端必须安装该组件才能使用, 可以打开的格式为xml(SpreadsheetML), html(表格), csv
    不支持直接打开xls, 因此必须转成符合他要求的上述格式





OWCEmbedExcel.html
--------------------------------
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8" />
        <script>
            /**
             * 通过OWC来打开SpreadsheetML格式的excel文档(IE浏览器必须的)
             * 该方式可用于解决在IE中一次性显示大量表格数据(10万个单元格以上)造成的性能问题
             *
             * 如果打开页面报错, 请先安装owc11.exe(OWC组件包)
             *
             * @see Microsoft Office Web 组件 Visual Basic 参考(owc vba手册)
             * @see Excel与OWC做报表总结
             */
            function readSpreadsheetML() {
                var spreadsheet = document.getElementById("spreadsheet");
                // XMLURL必须指向SpreadsheetML格式的XML文档
                // SpreadsheetML is the XML schema for Microsoft Office Excel 2003
                // 可以通过将excel文档另存为"XML 电子表格式 2003(*.xml)"的方式来获得这个xml文档
                // 还支持csv和html格式(包含表格)对应属性为CSVURL, HTMLURL
                spreadsheet.XMLURL = 'SpreadsheetML.xml';

                setExcelDisplayMode(spreadsheet);
                setProtectMode(spreadsheet);

                // 选择单元格冻结表格
                spreadsheet.Cells(2, 2).Select();
                spreadsheet.ActiveWindow.FreezePanes = true;
            }

            function setExcelDisplayMode(spreadsheet) {
                spreadsheet.DisplayToolbar = false;
                spreadsheet.DisplayOfficeLogo = false;
                spreadsheet.DisplayWorkbookTabs = false;
            }

            function setProtectMode(spreadsheet) {
                var protection = spreadsheet.ActiveSheet.Protection;
                protection.AllowFormattingRows = true;
                protection.AllowFormattingColumns = true;
                protection.AllowDeletingRows = false;
                protection.AllowInsertingRows = false;
                protection.AllowInsertingColumns = false;
                protection.AllowSorting = false;
                protection.Enabled = true;
                spreadsheet.ActiveWindow.EnableResize = false;
            }
        </script>
    </head>
    <body>
        <input type="button" value="Read SpreadsheetML"
            onclick="readSpreadsheetML()" />
        <!-- Microsoft Office Web Components(OWC) -->
        <object id="spreadsheet" style="width: 100%; height: 550px;"
            classid="CLSID:0002E559-0000-0000-C000-000000000046" />
    </body>
</html>


SpreadsheetML.xml
----------------------------
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?mso-application progid="Excel.Sheet"?>
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
        xmlns:html="http://www.w3.org/TR/REC-html40"
        xmlns:o="urn:schemas-microsoft-com:office:office"
        xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
        xmlns:x="urn:schemas-microsoft-com:office:excel">
    <ss:Worksheet ss:Name="Sheet1">
        <ss:Table>
            <ss:Row>
                <ss:Cell><Data ss:Type="String">Hello Excel!</Data></ss:Cell>
            </ss:Row>
        </ss:Table>
    </ss:Worksheet>
</Workbook>

 

 

posted on 2013-02-19 10:16  sungcong  阅读(978)  评论(0编辑  收藏  举报