如何在客户端读取excel文件内容?

2024-03-21

在 JSP 页面中,我需要浏览 excel 文件,在系统上选择文件后,我需要读取该 excel 文件内容并填写表格。

目前我已经尝试使用下面的代码,但它只能在 IE 中工作,并对 ActiveXObject 的 IE Internet 选项进行一些更改。它不适用于其他浏览器。

<script>
    function mytest2() {
        var Excel;
        Excel = new ActiveXObject("Excel.Application"); 
        Excel.Visible = false;
        form1.my_textarea2.value = Excel.Workbooks.Open("C:/Documents and Settings/isadmin/Desktop/test.xlsx").ActiveSheet.Cells(1,1).Value;
        Excel.Quit();
    }
</script>

请建议一些解决方案,以便它适用于所有浏览器。


xlsx 电子表格是一个 zip 文件,其中包含一堆 xml 文件。使用类似的东西zip.js http://gildas-lormeau.github.com/zip.js,您可以提取xml文件并在浏览器中解析它们。xlsx.js https://github.com/stephen-hardy/xlsx.js做这个。这是我的简单例子 https://gist.github.com/3375836。为了方便,复制到这里:

/*
    Relies on jQuery, underscore.js, Async.js (https://github.com/caolan/async), and zip.js (http://gildas-lormeau.github.com/zip.js).
    Tested only in Chrome on OS X.

    Call xlsxParser.parse(file) where file is an instance of File. For example (untested):

    document.ondrop = function(e) {
        var file = e.dataTransfer.files[0];
        excelParser.parse(file).then(function(data) {
            console.log(data);
        }, function(err) {
            console.log('error', err);
        });
    }
*/

xlsxParser = (function() {
    function extractFiles(file) {
        var deferred = $.Deferred();

        zip.createReader(new zip.BlobReader(file), function(reader) {
            reader.getEntries(function(entries) {
                async.reduce(entries, {}, function(memo, entry, done) {
                    var files = ['xl/worksheets/sheet1.xml', 'xl/sharedStrings.xml'];
                    if (files.indexOf(entry.filename) == -1) return done(null, memo);

                    entry.getData(new zip.TextWriter(), function(data) {
                        memo[entry.filename.split('/').pop()] = data;
                        done(null, memo);
                    });
                }, function(err, files) {
                    if (err) deferred.reject(err);
                    else deferred.resolve(files);
                });
            });
        }, function(error) { deferred.reject(error); });

        return deferred.promise();
    }

    function extractData(files) {
        var sheet = $(files['sheet1.xml']),
            strings = $(files['sharedStrings.xml']),
            data = [];

        var colToInt = function(col) {
            var letters = ["", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"];
            var col = $.trim(col).split('');

            var n = 0;

            for (var i = 0; i < col.length; i++) {
                n *= 26;
                n += letters.indexOf(col[i]);
            }

            return n;
        };

        var Cell = function(cell) {
            cell = cell.split(/([0-9]+)/);
            this.row = parseInt(cell[1]);
            this.column = colToInt(cell[0]);
        };

        var d = sheet.find('dimension').attr('ref').split(':');
        d = _.map(d, function(v) { return new Cell(v); });

        var cols = d[1].column - d[0].column + 1,
            rows = d[1].row - d[0].row + 1;

        _(rows).times(function() {
            var _row = [];
            _(cols).times(function() { _row.push(''); });
            data.push(_row);
        });

        sheet.find('sheetData row c').each(function(i, c) {
            var $cell = $(c),
                cell = new Cell($cell.attr('r')),
                type = $cell.attr('t'),
                value = $cell.find('v').text();

            if (type == 's') value = strings.find('si t').eq(parseInt(value)).text();

            data[cell.row - d[0].row][cell.column - d[0].column] = value;
        });

        return data;
    }

    return {
        parse: function(file) {
            return extractFiles(file).pipe(function(files) {
                return extractData(files);
            });
        }
    }
})();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在客户端读取excel文件内容? 的相关文章

随机推荐

  • 根据远程主机名更改 tmux 窗格的背景颜色

    如果我在单个窗格中从 tmux ssh 到远程服务器 是否可以根据服务器名称更改窗格的背景颜色 假设我所有的产品服务器都以prod XYZ开发服务器以dev XYZ 如果我通过 ssh 连接到这两台服务器 我可以根据我所在的服务器类型为它们
  • 有没有办法用 CSS 动画制作省略号动画?

    我正在尝试制作省略号动画 并且想知道 CSS 动画是否可以实现 所以它可能就像 Loading Loading Loading Loading Loading 基本上就这样继续下去 有任何想法吗 编辑 像这样 http playground
  • 如何在 CoffeeScript 中传递两个匿名函数作为参数?

    我想传递两个匿名函数作为 jQuery 悬停的参数 如下所示 element hover function do stuff on mouseover function do stuff on mouseout 只需一个就很容易 hover
  • git 错误; RPC失败;结果=22,HTTP 代码=401

    我正在尝试将一些颠覆代码和历史记录放入 TFS 中 通过 GIT 似乎是一个快速的胜利 并按照以下网址中的步骤进行操作 http www incyclesoftware com 2013 08 how easy its to migrate
  • 使用参数添加和删除事件监听器

    我正在写一个普通 JavaScript工具 启用后将事件侦听器添加到传递给它的每个元素 我想做这样的事情 var do something function obj do something for var i 0 i lt arr len
  • 如何将变量从 PHP 传递到 Python?

    我可以从 a 传递一个变量吗 php脚本到Python反之亦然 例如 myPHPScript php hello hello myPythonScript py print get the result from hello variabl
  • Android Studio 错误:增量输出目录应设置为输出目录

    我导入了一个github项目 https github com caarmen poet assistant https github com caarmen poet assistant到我的 Android Studio 当我单击 Ma
  • 如何更改菜单栏的字体颜色?

    如何更改 QML 菜单项的文本颜色MenuBar import QtQuick 2 4 import QtQuick Controls 1 3 import QtQuick Window 2 2 import QtQuick Dialogs
  • 在查询中使用变量表名

    有时我需要运行相同的 SQL Server 脚本 每次将每个表名称中的一两个字母更改为每次运行脚本时都不同的值 如何在脚本开头设置一次 这样我就不需要更改每个表名 这是该脚本的一个简化示例 实际上它包含更多的表 SELECT FROM T
  • Python:从url获取shoutcast/网络广播电台的名称

    我一直在尝试根据 python 中的 url 获取网络广播电台的名称 标题 但到目前为止还没有运气 网络广播电台似乎使用 HTTP 之外的其他协议 但如果我错了 请纠正我 例如 http 89 238 146 142 7030 http 8
  • CodeIgniter、模型、ORM,怎么处理?

    我从 CodeIgniter 开始 在 Google 中潜入几个小时后 我有点困惑 让我们尝试用一个简单的例子来解释我的问题 我有一个表 car 其中包含字段 name 和 color 因此我想要一个 php 类 Car 这样我的代码最终看
  • AWS Elastic Beanstalk:在运行 PHP 的 EC2 实例上终止 HTTPS

    我想在我的单实例 EBS 环境上允许 https 连接 我按照以下链接中的步骤操作 http docs aws amazon com elasticbeanstalk latest dg https singleinstance php h
  • 字符串作为决策树/随机森林中的特征

    我是机器学习新手 现在我正在做一些关于决策树 随机森林应用的问题 我正在尝试解决一个以数字和字符串 例如国家 地区名称 为特征的问题 现在 scikit learn 库仅接受数字作为参数 但我想注入字符串以及它们携带大量知识 我该如何处理这
  • ipython笔记本单元格的背景颜色

    如何更改 iPython Notebook 中特定单元格的背景颜色 例如 我正在编写一本手册 我想在灰色文本框中添加一些终端命令 如下所示http ipython org ipython doc 1 interactive nbconver
  • React Native - 如何像 iOS 或 Instagram 一样进行模糊视图?

    模糊背景透明度 是否可以在不使用背景图像的情况下模糊视图 我想展示家长内容在上面背景模糊视图 in modal 类似这样的 尝试过反应本机模糊 https github com react native community react na
  • Linq lambda 表达式 - 查找一周中距离当前日期(现在)最近的一天

    例如 我将星期一 星期四和星期日作为抽奖日期 使用 Linq Lambda 查找与 Datetime Now 最接近的 dayOfWeek 的方法是什么 我使用正常功能完成了此操作 但我想知道如何使用 Linq Lambda 来完成此操作
  • 在 webapp 中优雅地关闭 ExecutorService?

    在我的网络应用程序中 我创建了一个使用ExecutorService具有固定大小的线程池 我重复使用相同的ExecutorService在整个应用程序生命周期内 private static ExecutorService pool Exe
  • 如何创建一个内容为表达式结果的有限迭代器?

    我想创建一个Iterator通过 重复 评估表达式来获取下一个元素 并且我希望表达式能够返回某个值来终止它 我唯一发现的就是这样迭代器 continually http www scala lang org api current inde
  • Python有限差分函数?

    我一直在 Numpy Scipy 中寻找包含有限差分函数的模块 然而 我发现的最接近的是numpy gradient 这对于二阶精度的一阶有限差分很有用 但如果您想要更高阶的导数或更准确的方法 则效果不太好 我什至还没有找到很多专门用于此类
  • 如何在客户端读取excel文件内容?

    在 JSP 页面中 我需要浏览 excel 文件 在系统上选择文件后 我需要读取该 excel 文件内容并填写表格 目前我已经尝试使用下面的代码 但它只能在 IE 中工作 并对 ActiveXObject 的 IE Internet 选项进