You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何用JavaScript在textarea中正确显示Word文件内容?

嘿,我来帮你搞定这个问题!

问题出在哪?

你现在用readAsText()读取Word文件的思路本身就有问题——Word文件(不管是.doc还是.docx)根本不是纯文本格式

  • .docx本质是个ZIP压缩包,里面装的是一堆XML文件、媒体资源等,不是直接可读取的文本;
  • .doc是微软的旧二进制格式,内部结构复杂得很,完全和纯文本不搭边。
    所以用readAsText()读取出来的自然是一堆乱码的二进制字符,显示肯定异常。
怎么解决?用专业工具解析Word内容

推荐用mammoth.js这个轻量库,它专门用来解析.docx文件,能轻松提取出里面的纯文本内容。下面是修改后的完整代码示例:

首先,先引入mammoth.js(用CDN最方便):

<script src="https://unpkg.com/mammoth@1.6.0/mammoth.browser.min.js"></script>

然后修改你的上传函数:

vm.uploadDoc = function () {
  var file = document.getElementById("docFile").files[0];
  
  // 先判断文件格式,优先处理docx(doc格式前端难解析)
  if (file.name.endsWith(".docx")) {
    var fileReader = new FileReader();
    fileReader.onload = function(fileLoadedEvent){
      // 这里要读取成ArrayBuffer,因为docx是二进制压缩包
      var arrayBuffer = fileLoadedEvent.target.result;
      
      // 用mammoth提取纯文本
      mammoth.extractRawText({arrayBuffer: arrayBuffer})
        .then(function(result){
          // 拿到解析后的纯文本,赋值给textarea
          document.getElementById("inputTextToSave").value = result.value;
          
          // 如果有解析警告,可以在控制台查看
          var messages = result.messages;
          messages.forEach(function(message) {
            console.log(`${message.type}: ${message.message}`);
          });
        })
        .catch(function(error){
          console.error("解析Word文件出错啦:", error);
        });
    };
    // 注意这里调用的是readAsArrayBuffer,不是readAsText!
    fileReader.readAsArrayBuffer(file);
  } else {
    alert("目前只支持上传.docx格式的Word文件哦~");
  }
};
额外说明
  • 如果必须支持.doc格式,前端几乎没有轻量的解决方案,因为旧.doc的格式没有公开的简单解析逻辑,通常得靠后端工具(比如Apache POI、python-docx2txt)来处理:前端把文件传给后端,后端解析后返回文本内容,前端再显示。
  • 要是你不想引入外部库,也可以手动解压.docx(毕竟是ZIP包),然后读取里面的word/document.xml文件,再自己解析XML提取文本——但这种方式要写不少XML解析代码,远不如用mammoth.js省心。

内容的提问来源于stack exchange,提问作者Pooja

火山引擎 最新活动