怎样在Android中解析doc、docx、xls、xlsx格式文件?

可以直接复制实验,
       解析doc,要tm-extractors-0.4.jar这个包
       解析xls,要jxl.jar这个包

01 public static String readDOC(String path) {
02                 // 创建输入流读取doc文件
03                 FileInputStream in;
04                 String text = null;
05 //                Environment.getExternalStorageDirectory().getAbsolutePath()+ "/aa.doc")
06                 try {
07                         in = new FileInputStream(new File(path));
08                         int a= in.available();
09                         WordExtractor extractor = null;
10                         // 创建WordExtractor
11                         extractor = new WordExtractor();
12                         // 对doc文件进行提取
13                         text = extractor.extractText(in);
14                         System.out.println("解析得到的东西"+text);
15                 catch (FileNotFoundException e) {
16                         e.printStackTrace();
17                 catch (Exception e) {
18                         e.printStackTrace();
19                 }
20                 if (text == null) {
21                         text = "解析文件出现问题";
22                 }
23                 return text;
24         }
       解析xls
01 public static String readXLS(String path) {
02                 String str = "";
03                 try {
04                         Workbook workbook = null;
05                         workbook = Workbook.getWorkbook(new File(path));
06                         Sheet sheet = workbook.getSheet(0);
07                         Cell cell = null;
08                         int columnCount = sheet.getColumns();
09                         int rowCount = sheet.getRows();
10                         for (int i = 0; i < rowCount; i++) {
11                                 for (int j = 0; j < columnCount; j++) {
12                                         cell = sheet.getCell(j, i);
13                                         String temp2 = "";
14                                         if (cell.getType() == CellType.NUMBER) {
15                                                 temp2 = ((NumberCell) cell).getValue() + "";
16                                         else if (cell.getType() == CellType.DATE) {
17                                                 temp2 = "" + ((DateCell) cell).getDate();
18                                         else {
19                                                 temp2 = "" + cell.getContents();
20                                         }
21                                         str = str + "  " + temp2;
22                                 }
23                                 str += "\n";
24                         }
25                         workbook.close();
26                 catch (Exception e) {
27                 }
28                 if (str == null) {
29                         str = "解析文件出现问题";
30                 }
31                 return str;
32         }

解析docx
public static String readDOCX(String path) {
02                 String river = "";
03                 try {
04                         ZipFile xlsxFile = new ZipFile(new File(path));
05                         ZipEntry sharedStringXML = xlsxFile.getEntry("word/document.xml");
06                         InputStream inputStream = xlsxFile.getInputStream(sharedStringXML);
07                         XmlPullParser xmlParser = Xml.newPullParser();
08                         xmlParser.setInput(inputStream, "utf-8");
09                         int evtType = xmlParser.getEventType();
10                         while (evtType != XmlPullParser.END_DOCUMENT) {
11                                 switch (evtType) {
12                                 case XmlPullParser.START_TAG:
13                                         String tag = xmlParser.getName();
14                                         System.out.println(tag);
15                                         if (tag.equalsIgnoreCase("t")) {
16                                                 river += xmlParser.nextText() + "\n";
17                                         }
18                                         break;
19                                 case XmlPullParser.END_TAG:
20                                         break;
21                                 default:
22                                         break;
23                                 }
24                                 evtType = xmlParser.next();
25                         }
26                 catch (ZipException e) {
27                         e.printStackTrace();
28                 catch (IOException e) {
29                         e.printStackTrace();
30                 catch (XmlPullParserException e) {
31                         e.printStackTrace();
32                 }
33                 if (river == null) {
34                         river = "解析文件出现问题";
35                 }
36                 return river;
37         }
        解析xlsx
01 public static String readXLSX(String path) {
02                 String str = "";
03                 String v = null;
04                 boolean flat = false;
05                 List<String> ls = new ArrayList<String>();
06                 try {
07                         ZipFile xlsxFile = new ZipFile(new File(path));
08                         ZipEntry sharedStringXML = xlsxFile
09                                         .getEntry("xl/sharedStrings.xml");
10                         InputStream inputStream = xlsxFile.getInputStream(sharedStringXML);
11                         XmlPullParser xmlParser = Xml.newPullParser();
12                         xmlParser.setInput(inputStream, "utf-8");
13                         int evtType = xmlParser.getEventType();
14                         while (evtType != XmlPullParser.END_DOCUMENT) {
15                                 switch (evtType) {
16                                 case XmlPullParser.START_TAG:
17                                         String tag = xmlParser.getName();
18                                         if (tag.equalsIgnoreCase("t")) {
19                                                 ls.add(xmlParser.nextText());
20                                         }
21                                         break;
22                                 case XmlPullParser.END_TAG:
23                                         break;
24                                 default:
25                                         break;
26                                 }
27                                 evtType = xmlParser.next();
28                         }
29                         ZipEntry sheetXML = xlsxFile.getEntry("xl/worksheets/sheet1.xml");
30                         InputStream inputStreamsheet = xlsxFile.getInputStream(sheetXML);
31                         XmlPullParser xmlParsersheet = Xml.newPullParser();
32                         xmlParsersheet.setInput(inputStreamsheet, "utf-8");
33                         int evtTypesheet = xmlParsersheet.getEventType();
34                         while (evtTypesheet != XmlPullParser.END_DOCUMENT) {
35                                 switch (evtTypesheet) {
36                                 case XmlPullParser.START_TAG:
37                                         String tag = xmlParsersheet.getName();
38                                         if (tag.equalsIgnoreCase("row")) {
39                                         else if(tag.equalsIgnoreCase("c")) {
40                                                 String t = xmlParsersheet.getAttributeValue(null"t");
41                                                 if (t != null) {
42                                                         flat = true;
43                                                         System.out.println(flat + "有");
44                                                 else {
45                                                         System.out.println(flat + "没有");
46                                                         flat = false;
47                                                 }
48                                         else if(tag.equalsIgnoreCase("v")) {
49                                                 v = xmlParsersheet.nextText();
50                                                 if (v != null) {
51                                                         if (flat) {
52                                                                 str += ls.get(Integer.parseInt(v)) + "  ";
53                                                         else {
54                                                                 str += v + "  ";
55                                                         }
56                                                 }
57                                         }
58                                         break;
59                                 case XmlPullParser.END_TAG:
60                                         if(xmlParsersheet.getName().equalsIgnoreCase("row")
61                                                         && v != null) {
62                                                 str += "\n";
63                                         }
64                                         break;
65                                 }
66                                 evtTypesheet = xmlParsersheet.next();
67                         }
68                         System.out.println(str);
69                 catch (ZipException e) {
70                         e.printStackTrace();
71                 catch (IOException e) {
72                         e.printStackTrace();
73                 catch (XmlPullParserException e) {
74                         e.printStackTrace();
75                 }
76                 if (str == null) {
77                         str = "解析文件出现问题";
78                 }
79                 return str;
80         }

在Vue预览docxdocpdfxlsxlsx文件,可以使用第三方库来实现。 对于docxdocxlsxlsx文件,可以使用`js-xlsx`库来进行解析和预览。该库可以将Excel文件转换为JSON格式,而对于Word文件,可以使用`docx.js`库来进行解析和预览。 对于pdf文件,可以使用`pdf.js`库来进行预览。该库可以通过Canvas将PDF文件渲染成图片,然后在Vue显示。 下面是一个示例代码,演示如何使用上述库来预览不同类型的文件: ```html <template> <div> <div v-if="fileType === 'docx' || fileType === 'doc'"> <div v-html="docContent"></div> </div> <div v-else-if="fileType === 'xls' || fileType === 'xlsx'"> <table> <tr v-for="row in excelData"> <td v-for="cell in row">{{ cell }}</td> </tr> </table> </div> <div v-else-if="fileType === 'pdf'"> <canvas ref="pdfCanvas"></canvas> </div> </div> </template> <script> import XLSX from 'xlsx'; import Docx from 'docx'; import pdfjsLib from 'pdfjs-dist'; export default { data() { return { fileType: '', docContent: '', excelData: [], }; }, mounted() { // 根据文件类型进行解析和预览 if (this.fileType === 'docx' || this.fileType === 'doc') { const reader = new FileReader(); reader.onload = (event) => { const content = event.target.result; const doc = new Docx(); doc.load(content); this.docContent = doc.getHtml(); }; reader.readAsArrayBuffer(this.file); } else if (this.fileType === 'xls' || this.fileType === 'xlsx') { const reader = new FileReader(); reader.onload = (event) => { const content = event.target.result; const workbook = XLSX.read(content, { type: 'array' }); const sheetName = workbook.SheetNames[0]; const worksheet = workbook.Sheets[sheetName]; this.excelData = XLSX.utils.sheet_to_json(worksheet, { header: 1 }); }; reader.readAsArrayBuffer(this.file); } else if (this.fileType === 'pdf') { const canvas = this.$refs.pdfCanvas; const ctx = canvas.getContext('2d'); pdfjsLib.getDocument(this.file).promise.then((pdf) => { pdf.getPage(1).then((page) => { const viewport = page.getViewport({ scale: 1.5 }); canvas.height = viewport.height; canvas.width = viewport.width; page.render({ canvasContext: ctx, viewport, }); }); }); } }, props: { file: { type: File, required: true, }, }, created() { // 根据文件后缀名判断文件类型 const fileExtension = this.file.name.split('.').pop(); if (fileExtension === 'docx' || fileExtension === 'doc') { this.fileType = 'docx'; } else if (fileExtension === 'xls' || fileExtension === 'xlsx') { this.fileType = 'xls'; } else if (fileExtension === 'pdf') { this.fileType = 'pdf'; } }, }; </script> ``` 在上述代码,根据文件后缀名判断文件类型,然后使用不同的库进行解析和预览。对于Word文件,使用`docx.js`库将文件解析为HTML格式,然后在Vue显示;对于Excel文件,使用`js-xlsx`库将文件解析为JSON格式,然后在Vue生成表格;对于PDF文件,使用`pdf.js`库将文件渲染成图片,然后在Vue显示。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值