您实际上可以使用 javascript 来执行此操作。只要它是 excel 2007+ 文档,这并不难。只是很多步骤和模棱两可。如果是 2003 或更低版本,您可能会遇到一些问题,因为我不确定是否有任何 JS 库可以真正帮助读取二进制文件。反正...
获取jszip。这使您可以解压缩 Excel 2007+ 文件(实际上,Excel 2007+ 文件包含的所有内容都是一堆 XML 文件)
如果您不关心 IE,并且希望您的客户端浏览器是最新的,您可以使用 FileReader api(查看http://caniuse.com/#feat=filereader)。如果您确实关心 IE,我敢肯定有一个 flash 项目可以读取文件的内容并通过 externalInterface 将其发送到 javascript。或者你可以自己装。或者,也许您可以在 iframe 中“上传”文件并有一个“echo”,只需打印出 base64 编码文件的内容,然后您可以将其泵入 jszip。
一旦你能够读取文件的内容,使用 jszip 打开文件内容,可能使用new JSZip(zipDataBinary, {base64:false});
由于您只是替换文本,因此您很可能只关注 sharedStrings.xml 文件。
zipFile = new JSZip(zipDataBinary, {base64:false});
var sharedStringFile= zipFile.file(/sharedStrings\.xml/);
现在,轻松-
var newData = sharedStringFile.asText().replace(/* and all the stuff you want replaced, or in a loop, or whatever.. */);
这里要注意的重要一点是,Excel 2007+ 文件中的每个字符串都保存在这个 sharedStrings.xml 文件中——他们做了一些工作来尝试优化 excel 文件的大小,字符串数据是最重要的数据之一电子表格中通常重复的数据片段。所以,如果你有一个单元格 A1 有“这是一个单元格!”,它实际上表示为
<c r="A1" t="s">
<v>1</v>
</c>
'1' 是 sharedStrings.xml 文件中字符串的索引。无论如何..
完成后,
zipFile.file(sharedStringFile.name, newData);
这将更新 zip 文件的内容。现在您可以使用某种“echo”机制将其发送到服务器,或者使用“Downloadify”允许用户下载它。或者,如果您想实际阅读并在页面上显示它,您可以......它只是涉及更多。
像这样打包 zip 文件:
var sendThisDataSomewhere = zipFile.generate({base64: false});
作为一个无耻的插件,我从我一直在从事的项目中发现了这一切 - http://excelbuilderjs.com/