解析office文件(doc,xls,ppt,等)

//doc文件
	public static String readDOC(String path) {
		// 创建输入流读取doc文件
		FileInputStream in;
		String text = null;
		path = Environment.getExternalStorageDirectory().getAbsolutePath()+"/"+path;
		try {
			in = new FileInputStream(new File(path));
			int a= in.available();
			WordExtractor extractor = null;
			// 创建WordExtractor
			extractor = new WordExtractor();
			// 对doc文件进行提取
			text = extractor.extractText(in);
			System.out.println("解析得到的东西"+text);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		}
		if (text == null) {
			text = "解析文件出现问题";
		}
		return text;
	}



xls

//xls文件
	public static String readXLS(String path) {
		String str = "";
		path = Environment.getExternalStorageDirectory().getAbsolutePath()+"/"+path;
		try {
			Workbook workbook = null;
			workbook = Workbook.getWorkbook(new File(path));
			Sheet sheet = workbook.getSheet(0);
			Cell cell = null;
			int columnCount = sheet.getColumns();
			int rowCount = sheet.getRows();
			for (int i = 0; i < rowCount; i++) {
				for (int j = 0; j < columnCount; j++) {
					cell = sheet.getCell(j, i);
					String temp2 = "";
					if (cell.getType() == CellType.NUMBER) {
						temp2 = ((NumberCell) cell).getValue() + "";
					} else if (cell.getType() == CellType.DATE) {
						temp2 = "" + ((DateCell) cell).getDate();
					} else {
						temp2 = "" + cell.getContents();
					}
					str = str + "  " + temp2;
				}
				str += "\n";
			}
			workbook.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
		if (str == null) {
			str = "解析文件出现问题";
		}
		System.out.println("解析得到的东西"+str);
		return str;
	}


docx

// 解析docx
	public static String readDOCX(String path) {
		String river = "";
		path = Environment.getExternalStorageDirectory().getAbsolutePath()+"/"+path;
		try {
			ZipFile xlsxFile = new ZipFile(new File(path));
			ZipEntry sharedStringXML = xlsxFile.getEntry("word/document.xml");
			InputStream inputStream = xlsxFile.getInputStream(sharedStringXML);
			XmlPullParser xmlParser = Xml.newPullParser();
			xmlParser.setInput(inputStream, "utf-8");
			int evtType = xmlParser.getEventType();
			while (evtType != XmlPullParser.END_DOCUMENT) {
				switch (evtType) {
				case XmlPullParser.START_TAG:
					String tag = xmlParser.getName();
					System.out.println(tag);
					if (tag.equalsIgnoreCase("t")) {
						river += xmlParser.nextText() + "\n";
					}
					break;
				case XmlPullParser.END_TAG:
					break;
				default:
					break;
				}
				evtType = xmlParser.next();
			}
		} catch (ZipException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} catch (XmlPullParserException e) {
			e.printStackTrace();
		}
		if (river == null) {
			river = "解析文件出现问题";
		}
		return river;
	}


xlsx

// 解析xlsx
	public static String readXLSX(String path) {
		String str = "";
		String v = null;
		boolean flat = false;
		List<String> ls = new ArrayList<String>();
		try {
			ZipFile xlsxFile = new ZipFile(new File(path));
			ZipEntry sharedStringXML = xlsxFile
					.getEntry("xl/sharedStrings.xml");
			InputStream inputStream = xlsxFile.getInputStream(sharedStringXML);
			XmlPullParser xmlParser = Xml.newPullParser();
			xmlParser.setInput(inputStream, "utf-8");
			int evtType = xmlParser.getEventType();
			while (evtType != XmlPullParser.END_DOCUMENT) {
				switch (evtType) {
				case XmlPullParser.START_TAG:
					String tag = xmlParser.getName();
					if (tag.equalsIgnoreCase("t")) {
						ls.add(xmlParser.nextText());
					}
					break;
				case XmlPullParser.END_TAG:
					break;
				default:
					break;
				}
				evtType = xmlParser.next();
			}
			ZipEntry sheetXML = xlsxFile.getEntry("xl/worksheets/sheet1.xml");
			InputStream inputStreamsheet = xlsxFile.getInputStream(sheetXML);
			XmlPullParser xmlParsersheet = Xml.newPullParser();
			xmlParsersheet.setInput(inputStreamsheet, "utf-8");
			int evtTypesheet = xmlParsersheet.getEventType();
			while (evtTypesheet != XmlPullParser.END_DOCUMENT) {
				switch (evtTypesheet) {
				case XmlPullParser.START_TAG:
					String tag = xmlParsersheet.getName();
					if (tag.equalsIgnoreCase("row")) {
					} else if (tag.equalsIgnoreCase("c")) {
						String t = xmlParsersheet.getAttributeValue(null, "t");
						if (t != null) {
							flat = true;
							System.out.println(flat + "有");
						} else {
							System.out.println(flat + "没有");
							flat = false;
						}
					} else if (tag.equalsIgnoreCase("v")) {
						v = xmlParsersheet.nextText();
						if (v != null) {
							if (flat) {
								str += ls.get(Integer.parseInt(v)) + "  ";
							} else {
								str += v + "  ";
							}
						}
					}
					break;
				case XmlPullParser.END_TAG:
					if (xmlParsersheet.getName().equalsIgnoreCase("row")
							&& v != null) {
						str += "\n";
					}
					break;
				}
				evtTypesheet = xmlParsersheet.next();
			}
			System.out.println(str);
		} catch (ZipException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} catch (XmlPullParserException e) {
			e.printStackTrace();
		}
		if (str == null) {
			str = "解析文件出现问题";
		}
		return str;
	}


pptx

public static String readPPTX(String path) {
                List<String> ls = new ArrayList<String>();
                String river = "";
                ZipFile xlsxFile = null;
                try {
                        xlsxFile = new ZipFile(new File(path));// pptx按照读取zip格式读取
                } catch (ZipException e1) {
                        e1.printStackTrace();
                } catch (IOException e1) {
                        e1.printStackTrace();
                }
                try {
                        ZipEntry sharedStringXML = xlsxFile.getEntry("[Content_Types].xml");// 找到里面存放内容的文件
                        InputStream inputStream = xlsxFile.getInputStream(sharedStringXML);// 将得到文件流
                        XmlPullParser xmlParser = Xml.newPullParser();// 实例化pull
                        xmlParser.setInput(inputStream, "utf-8");// 将流放进pull中
                        int evtType = xmlParser.getEventType();// 得到标签类型的状态
                        while (evtType != XmlPullParser.END_DOCUMENT) {// 循环读取流
                                switch (evtType) {
                                case XmlPullParser.START_TAG: // 判断标签开始读取
                                        String tag = xmlParser.getName();// 得到标签
                                        if (tag.equalsIgnoreCase("Override")) {
                                                String s = xmlParser
                                                                .getAttributeValue(null, "PartName");
                                                if (s.lastIndexOf("/ppt/slides/slide") == 0) {
                                                        ls.add(s);
                                                }
                                        }
                                        break;
                                case XmlPullParser.END_TAG:// 标签读取结束
                                        break;
                                default:
                                        break;
                                }
                                evtType = xmlParser.next();// 读取下一个标签
                        }
                } catch (ZipException e) {
                        e.printStackTrace();
                } catch (IOException e) {
                        e.printStackTrace();
                } catch (XmlPullParserException e) {
                        e.printStackTrace();
                }
                for (int i = 1; i < (ls.size() + 1); i++) {// 假设有6张幻灯片
                        river += "第" + i + "张················" + "\n";
                        try {
                                ZipEntry sharedStringXML = xlsxFile.getEntry("ppt/slides/slide"
                                                + i + ".xml");// 找到里面存放内容的文件
                                InputStream inputStream = xlsxFile
                                                .getInputStream(sharedStringXML);// 将得到文件流
                                XmlPullParser xmlParser = Xml.newPullParser();// 实例化pull
                                xmlParser.setInput(inputStream, "utf-8");// 将流放进pull中
                                int evtType = xmlParser.getEventType();// 得到标签类型的状态
                                while (evtType != XmlPullParser.END_DOCUMENT) {// 循环读取流
                                        switch (evtType) {
                                        case XmlPullParser.START_TAG: // 判断标签开始读取
                                                String tag = xmlParser.getName();// 得到标签
                                                if (tag.equalsIgnoreCase("t")) {
                                                        river += xmlParser.nextText() + "\n";
                                                }
                                                break;
                                        case XmlPullParser.END_TAG:// 标签读取结束
                                                break;
                                        default:
                                                break;
                                        }
                                        evtType = xmlParser.next();// 读取下一个标签
                                }
                        } catch (ZipException e) {
                                e.printStackTrace();
                        } catch (IOException e) {
                                e.printStackTrace();
                        } catch (XmlPullParserException e) {
                                e.printStackTrace();
                        }
                }
                if (river == null) {
                        river = "解析文件出现问题";
                }
                return river;
        }



Activity

//得到高度
		Display display = this.getWindowManager().getDefaultDisplay();
		height = display.getHeight();
		width = display.getWidth();

String url = "aa.doc";
//打开文件
		this.setContentView(R.layout.show); 		
		lay_show = (LinearLayout) this.findViewById(R.id.show_layout);		
		//设置阅读背景(平铺)
		Bitmap bitmap1 = BitmapFactory.decodeResource(getResources(), R.drawable.rebg);  
		BitmapDrawable bd1 = new BitmapDrawable(bitmap1);  
		bd1.setTileModeXY(TileMode.REPEAT , TileMode.REPEAT );  
		bd1.setDither(true);  
		lay_show.setBackgroundDrawable(bd1);  
		//添加线性参数
		lp_show = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);		
		lp_show.height=height;
		lp_show.weight=width;
		TextView tv = new TextView(this);
		tv.setTextSize(14);
		tv.setTextColor(Color.WHITE);
		tv.setWidth(width);
		lay_show.addView(tv,lp_show);
tv.setText(readDOC(url));


以上方法只能读取字符流,不能读取图片。

方法二,利用手机已安装的软件读取。

//android获取一个用于打开HTML文件的intent 
public static Intent getHtmlFileIntent( String param ) 
{ 
Uri uri = Uri.parse(param ).buildUpon().encodedAuthority("com.android.htmlfileprovider").scheme("content").encodedPath(param ).build(); 
Intent intent = new Intent("android.intent.action.VIEW"); 
intent.setDataAndType(uri, "text/html"); 
return intent; 
} 
//android获取一个用于打开图片文件的intent 
public static Intent getImageFileIntent( String param ) 
{ 
Intent intent = new Intent("android.intent.action.VIEW"); 
intent.addCategory("android.intent.category.DEFAULT"); 
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
Uri uri = Uri.fromFile(new File(param )); 
intent.setDataAndType(uri, "image/*"); 
return intent; 
} 
//android获取一个用于打开PDF文件的intent 
public static Intent getPdfFileIntent( String param ) 
{ 
Intent intent = new Intent("android.intent.action.VIEW"); 
intent.addCategory("android.intent.category.DEFAULT"); 
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
Uri uri = Uri.fromFile(new File(param )); 
intent.setDataAndType(uri, "application/pdf"); 
return intent; 
} 
//android获取一个用于打开文本文件的intent 
public static Intent getTextFileIntent( String param, boolean paramBoolean) 
{ 
Intent intent = new Intent("android.intent.action.VIEW"); 
intent.addCategory("android.intent.category.DEFAULT"); 
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
if (paramBoolean) 
{ 
Uri uri1 = Uri.parse(param ); 
intent.setDataAndType(uri1, "text/plain"); 
} 
else 
{ 
Uri uri2 = Uri.fromFile(new File(param )); 
intent.setDataAndType(uri2, "text/plain"); 
} 
return intent; 
} 
//android获取一个用于打开音频文件的intent 
public static Intent getAudioFileIntent( String param ) 
{ 
Intent intent = new Intent("android.intent.action.VIEW"); 
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
intent.putExtra("oneshot", 0); 
intent.putExtra("configchange", 0); 
Uri uri = Uri.fromFile(new File(param )); 
intent.setDataAndType(uri, "audio/*"); 
return intent; 
} 
//android获取一个用于打开视频文件的intent 
public static Intent getVideoFileIntent( String param ) 
{ 
Intent intent = new Intent("android.intent.action.VIEW"); 
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
intent.putExtra("oneshot", 0); 
intent.putExtra("configchange", 0); 
Uri uri = Uri.fromFile(new File(param )); 
intent.setDataAndType(uri, "video/*"); 
return intent; 
} 
//android获取一个用于打开CHM文件的intent 
public static Intent getChmFileIntent( String param ) 
{ 
Intent intent = new Intent("android.intent.action.VIEW"); 
intent.addCategory("android.intent.category.DEFAULT"); 
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
Uri uri = Uri.fromFile(new File(param )); 
intent.setDataAndType(uri, "application/x-chm"); 
return intent; 
} 
//android获取一个用于打开Word文件的intent 
public static Intent getWordFileIntent( String param ) 
{ 
Intent intent = new Intent("android.intent.action.VIEW"); 
intent.addCategory("android.intent.category.DEFAULT"); 
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
Uri uri = Uri.fromFile(new File(param )); 
intent.setDataAndType(uri, "application/msword"); 
return intent; 
} 
//android获取一个用于打开Excel文件的intent 
public static Intent getExcelFileIntent( String param ) 
{ 
Intent intent = new Intent("android.intent.action.VIEW"); 
intent.addCategory("android.intent.category.DEFAULT"); 
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
Uri uri = Uri.fromFile(new File(param )); 
intent.setDataAndType(uri, "application/vnd.ms-excel"); 
return intent; 
} 
//android获取一个用于打开PPT文件的intent 
public static Intent getPptFileIntent( String param ) 
{ 
Intent intent = new Intent("android.intent.action.VIEW"); 
intent.addCategory("android.intent.category.DEFAULT"); 
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
Uri uri = Uri.fromFile(new File(param )); 
intent.setDataAndType(uri, "application/vnd.ms-powerpoint"); 
return intent; 
} 



用下边代码触发

Intent it =  getWordFileIntent(url);
startActivity(it);

推荐下开的淘宝小店筱夜宫主(http://xiaoyegongzhu.taobao.com/)DR.HU 胡博士美妆~坐在电脑旁的汉子姑娘注意脸部护理呀,做了程序媛,也要美丽啊。。。小店有优惠码:YE4450,报优惠码,抵两元券,(⊙o⊙)… 

猜你喜欢

转载自caraly.iteye.com/blog/1765248