【问题标题】:Validating and reading a Word file in Android在 Android 中验证和读取 Word 文件
【发布时间】:2012-05-11 09:07:19
【问题描述】:

我希望能够访问用户手机sdcard中的一个word文件,该文件将由用户选择。我希望能够处理该文件,即读取其内容并根据用户的意愿对其进行修改,并在用户单击“保存”时将其保存。

在 Android 中可以吗?如何让程序明白该文件是 Word 文件?

请注意,我不想查看 Word 文件。用户将选择 Word 文件,我的应用程序应该能够对其进行一些更改并保存它。

【问题讨论】:

  • 用户是否可以只选择word文件?无论如何,您可以获得此文件的 AbsolutePath 并将其检查为 path.endsWith(".doc");
  • @user1049280 :您无法确定以 '.doc' 结尾的所有内容都是 word 文件。如果我存储带有扩展名 'image.doc' 的图像怎么办。
  • 你知道,在像 Windows 这样的操作系统中,只有用户头疼的是他保存了扩展名不正确的东西:)
  • @user1049280 :实际上这是一个安全应用程序。所以验证扩展是必须的:)
  • 在您明确指定要对文件执行的操作之前,这个问题太宽泛而无法回答。充其量人们可以建议用于处理或转换 word 文件的库,或者从诸如开放式办公室之类的东西中提取功能并将其移植。

标签: android ms-word


【解决方案1】:

恕我直言,最简单的方法是将 Apache POI 库移植到 Android。这是可能的,有proof

移植 POI 您可以将 Word 编辑功能嵌入到您的应用程序中。

一段代码如:

Intent intent = new Intent(Intent.ACTION_EDIT); 
Uri uri = Uri.parse("file:///"+file.getAbsolutePath()); 
intent.setDataAndType(uri, "plain/text"); 
startActivity(intent);

仅表示 Word 文件将由其他应用程序编辑 - 而不是您的应用程序。据我了解,这并不是您想要的。

【讨论】:

  • 我不想打开任何编辑器来编辑 word 文件。我只想在读取现有内容后在word文件末尾添加一个固定内容。我希望以编程方式完成此操作,然后保存 word 文件。
  • 你可能需要弄清楚如何直接使用类似这样的文件访问功能,而不是为编辑器供电。
  • @Ashwin 与您使用 POI 库所做的完全相同 - 这些东西非常适合您的任务 :)
  • @barmaley :我会尝试并告诉你
  • 如何从 Fragment 调用它?请帮助... @barmaley
【解决方案2】:

所以,正如我在上面所写的。检查它是否是word文件(.doc)的最简单方法是获取它的绝对路径并使用path.endsWith(".doc");进行检查

Android 没有默认查看 .doc 文件的应用,但如果用户安装了这样的应用(即 Polaris Office),您可以通过以下方式查看:

//Uri uri = Uri.parse("file://"+file.getAbsolutePath());
Intent intent = new Intent();
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setAction(Intent.ACTION_VIEW);
String type = "application/msword";
intent.setDataAndType(Uri.fromFile(file), type);
startActivity(intent);  

【讨论】:

  • 而且我不想查看word文件。只需读取其数据并进行一些修改。
【解决方案3】:

我不确定,但我理解的是,您想要的是能够确定文件是 word 文档,而无需简单地查看扩展名。

我认为 word 文档有文件签名(请参阅link

在这种情况下,文件签名是一种 OLE 复合文件格式,在标题位置具有以下二进制文件

d0 cf 11 e0 a1 b1 1a e1

所以检查相应的字节应该说它是否是一个word文档。请注意,我不确定二进制文件是特定于 word、doc 还是 docx 还是适用于所有 microsoft office :powerpoint、excel、word。

您或许应该在网上搜索“microsoft word 文档文件签名”。这肯定会为您提供您正在寻找的信息。

现在,如何“编辑”它是另一个问题。

【讨论】:

    【解决方案4】:

    读取和写入 Word 文档

    Apache POI 移植到Android 很可能是对工时限制的项目唯一现实的解决方案。它已由其他人完成,并且在网络上有一些可用的信息如何做到这一点。以下博客有一个 Excel 示例,您可以将其作为 Word 解决方案的起点:

    Android read write excel file using Apache POI

    验证

    虽然 Apache POI 很可能是您的最佳选择,但它打开的某些文档将无法在 MS Word 中打开,因此不是有效的 MS Word 文档。

    Word 格式的结构相当复杂。它不仅仅是带有标签的文本流。它是一种专有格式,如果不访问格式结构,就不可能完全准确地验证 Word 文件。

    最后,对 Word 文档的唯一 100% 准确验证是它是否在 MS Word 中打开。 This 与 Microsoft Word MVP Jay Freedman 的讨论提供了有关验证问题的一些观点以及对 Word 格式结构的一些见解。

    Net,如果您使用 Apache POI,您会遇到一些误报,这取决于您客户的要求是否可以接受。

    【讨论】:

      【解决方案5】:

      您的问题需要进一步澄清

      无论如何,这就是您编辑文件应该做的事情

      1. 读取文件

        File sdcard = Environment.getExternalStorageDirectory();
        File file = new File(sdcard,"theFILE");
        StringBuilder content = new StringBuilder();
        try {
            BufferedReader br = new BufferedReader(new FileReader(file));
            String line;
            while ((line = br.readLine()) != null) {
                content.append(line);
                content.append('\n');
            }
        }
        catch (IOException e) {
        }
        
      2. 编辑内容

        content.append("bla bla");
        content.append("kaza maza");
        
      3. 保存文件

        FileOutputStream f = new FileOutputStream(file);
        f.write(content.toString().toCharArray());
        

      记得在清单中添加写入 sdcard 的权限:

      <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
      

      验证

      不幸的是,这是最难的部分。 Apache POI 是一个选择;但是它是一个大型库,不能保证正确的行为。

      完美的解决方案是检查MS-DOC format。这是一个非常大的要求。对于这样一个有限的应用程序,我想如果您搜索网络,您将找不到任何东西。因此,您必须实现一个遵守这种格式的阅读器。

      【讨论】:

      • 您想验证文件是否被格式化为 .doc 文件?
      • Office 的答案是错误的,ig 的目的是查看文件然后它没有回答问题并且之前的代码拧紧了文件
      【解决方案6】:

      如果您想直接编辑数据,只需对可用的文本编辑器执行意图即可。

      Intent intent = new Intent(Intent.ACTION_EDIT); 
      Uri uri = Uri.parse("file:///"+file.getAbsolutePath()); 
      intent.setDataAndType(uri, "plain/text"); 
      startActivity(intent);
      

      【讨论】:

      • @Ashwin 它将以纯文本格式打开文件,即当您尝试在记事本中打开 .doc 时会发生什么。我不知道您是否能够在不破坏整个内容的情况下编辑文档的实际文本。
      • 我不想查看内容。一旦我从该文件创建输入流。我想验证它是否是一个word doc。如果是,我只想以编程方式修改文档并再次保存。
      • @Ashwin我刚查了一下,word/styles.xml word/fontTable.xml出现在.docx文件中,可能后台专门搜索这些字符串可以判断是不是真的文件?跨度>
      猜你喜欢
      • 2011-11-06
      • 1970-01-01
      • 2015-12-02
      • 1970-01-01
      • 1970-01-01
      • 2017-10-25
      • 1970-01-01
      • 1970-01-01
      • 2015-11-10
      相关资源
      最近更新 更多