10

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

在安卓中可以吗?如何让程序知道该文件是 Word 文件?

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

4

6 回答 6

2

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

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

一段代码如:

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

仅仅意味着 Word 文件将由其他一些应用程序编辑 - 而不是您的。据我了解,这并不完全是您想要的。

于 2012-05-13T18:25:43.037 回答
1

所以,正如我在上面写的。检查它是否是单词文件(.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);  
于 2012-05-11T09:16:21.577 回答
1

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

我认为word文档有文件签名(见这个链接

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

d0 cf 11 e0 a1 b1 1a e1

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

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

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

于 2012-05-14T12:35:24.587 回答
1

读取和写入 Word 文档

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

Android 使用 Apache POI 读写 excel 文件

验证

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

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

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

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

于 2012-05-14T13:55:33.160 回答
1

您的问题需要进一步澄清

无论如何,这是你应该做的编辑文件

  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 格式。这是一个非常大的要求。对于这样一个有限的应用程序,我想如果您搜索网络,您将找不到任何东西。因此,您必须实现一个遵守这种格式的阅读器。

于 2012-05-18T10:07:46.580 回答
0

如果您想直接编辑数据,只需对可用的文本编辑器进行操作即可。

Intent intent = new Intent(Intent.ACTION_EDIT); 
Uri uri = Uri.parse("file:///"+file.getAbsolutePath()); 
intent.setDataAndType(uri, "plain/text"); 
startActivity(intent);
于 2012-05-11T09:54:28.923 回答