[Android]导入导出Excel表格到本地SQLite
来源:互联网 发布:网络虚拟技术 编辑:程序博客网 时间:2024/06/06 14:19
[Android]导入导出Excel表格到SQLite
@Author GQ 2016年11月16日 最近郭神出了LitePal的新版本,感觉好用的不要不要的,导入数据的时候每次都要手写添加,不如直接用excel导入方便多了.
效果图
- 需要导入的excel资源,自己随便写的,只有学号和学生姓名两列
- 导入后
查阅资料后,发现有 jxl 和 poi 两种, 貌似前者不太受欢迎了,所以这里记录POI方式:
用到的jar包: http://poi.apache.org/download.html#POI-3.15
- Android导入导出Excel表格到SQLite
- 效果图
- AndroidStudio使用
- 使用
1. AndroidStudio使用
//导入jar包dependencies { compile files('libs/poi-3.15.jar') compile 'org.litepal.android:core:1.4.0'}
2. 使用
- POI:
HSSF - 提供读写Microsoft Excel XLS格式档案的功能。
XSSF - 提供读写Microsoft Excel OOXML XLSX格式档案的功能。
HWPF - 提供读写Microsoft Word DOC格式档案的功能。
HSLF - 提供读写Microsoft PowerPoint格式档案的功能。
HDGF - 提供读Microsoft Visio格式档案的功能。
HPBF - 提供读Microsoft Publisher格式档案的功能。
HSMF - 提供读Microsoft Outlook格式档案的功能。
//fileChooser界面就省略了,直接调用系统的文件管理,触发事件...//导入格式为 .xls .xlsxIntent intent = new Intent(Intent.ACTION_GET_CONTENT);intent.setType("application/*");//设置类型intent.addCategory(Intent.CATEGORY_OPENABLE);startActivityForResult(intent, 1);//然后进入系统的文件管理,选择文件后@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode == RESULT_OK && data != null) { LogUtil.e(TAG, "选择的文件Uri = " + data.toString()); //通过Uri获取真实路径 final String excelPath = getRealFilePath(this, data.getData()); LogUtil.e(TAG, "excelPath = " + excelPath);// /storage/emulated/0/test.xls if (excelPath.contains(".xls") || excelPath.contains(".xlsx")) { showSnack("正在加载Excel中..."); //载入excel readExcel(excelPath); } else { showSnack("此文件不是excel格式"); } } }//读取Excel表 private void readExcel(String excelPath) { try { InputStream input = new FileInputStream(new File(excelPath)); POIFSFileSystem fs = new POIFSFileSystem(input); HSSFWorkbook wb = new HSSFWorkbook(fs); HSSFSheet sheet = wb.getSheetAt(0); // Iterate over each row in the sheet Iterator<Row> rows = sheet.rowIterator(); while (rows.hasNext()) { HSSFRow row = (HSSFRow) rows.next(); System.out.println("Row #" + row.getRowNum()); //每一行 = 新建一个学生 Student stu = new Student(); // Iterate over each cell in the row and print out the cell"s // content Iterator<Cell> cells = row.cellIterator(); while (cells.hasNext()) { HSSFCell cell = (HSSFCell) cells.next(); switch (cell.getCellType()) { case HSSFCell.CELL_TYPE_NUMERIC: System.out.println("number= " + (int) (cell.getNumericCellValue())); //自定操作,我这里写入学号 stu.setSno((int) (cell.getNumericCellValue()) + ""); break; case HSSFCell.CELL_TYPE_STRING: System.out.println("string= " + cell.getStringCellValue()); //自定操作,我这里写入姓名 stu.setName(cell.getStringCellValue()); break; case HSSFCell.CELL_TYPE_BOOLEAN: System.out.println("boolean= " + cell.getBooleanCellValue()); break; case HSSFCell.CELL_TYPE_FORMULA: System.out.println("formula= " + cell.getCellFormula()); break; default: System.out.println("unsuported sell type"); break; } } stu.save(); } } catch (IOException ex) { ex.printStackTrace(); } //刷新列表 getAllStudent(); }//查询所有学生private void getAllStudent() { studentList = DataSupport.findAll(Student.class);} /** * 根据Uri获取真实图片路径 * <p/> * 一个android文件的Uri地址一般如下: * content://media/external/images/media/62026 * * @param context * @param uri * @return */ public static String getRealFilePath(final Context context, final Uri uri) { if (null == uri) return null; final String scheme = uri.getScheme(); String data = null; if (scheme == null) data = uri.getPath(); else if (ContentResolver.SCHEME_FILE.equals(scheme)) { data = uri.getPath(); } else if (ContentResolver.SCHEME_CONTENT.equals(scheme)) { Cursor cursor = context.getContentResolver().query(uri, new String[]{MediaStore.Images.ImageColumns.DATA}, null, null, null); if (null != cursor) { if (cursor.moveToFirst()) { int index = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA); if (index > -1) { data = cursor.getString(index); } } cursor.close(); } } return data; }
//数据导出到excelString ROOT_PATH = Environment.getExternalStorageDirectory().getAbsolutePath() + "/" + getResources().getString(R.string.app_name) + "/"; public void writeExcel(String exFileName, String sheetName) { try { File dir = new File(ROOT_PATH); if (!dir.exists()) { dir.mkdirs(); } String exPath = ROOT_PATH + exFileName + ".xls"; File file = new File(exPath); file.createNewFile(); OutputStream out = new FileOutputStream(file); //新建excel HSSFWorkbook workBook = new HSSFWorkbook(); //新建sheet HSSFSheet sheet = workBook.createSheet(sheetName); //创建单元格样式 HSSFCellStyle style = getStyle(workBook); for (int i = 0; i < adapterList.size(); i++) { //创建行 HSSFRow row = sheet.createRow(i); ListInfo info = adapterList.get(i); for (int j = 0; j < 13; j++) { //创建列单元格 HSSFCell cell = row.createCell(j); cell.setCellStyle(style); switch (j) { case 0://时间 cell.setCellValue(info.getTiem()); break; case 1: cell.setCellValue(info.getWq()); break; case 2: cell.setCellValue(info.getWb()); break; case 3: cell.setCellValue(info.getWs()); break; case 4: cell.setCellValue(info.getWg()); break; case 5: cell.setCellValue(info.getWq()); break; case 6: cell.setCellValue(info.getQb()); break; case 7: cell.setCellValue(info.getQs()); break; case 8: cell.setCellValue(info.getQg()); break; case 9: cell.setCellValue(info.getBs()); break; case 10: cell.setCellValue(info.getBg()); break; case 11: cell.setCellValue(info.getSg()); break; case 12://号码 cell.setCellValue(info.getCode()); break; } //合并单元格,参数是起始行,结束行,起始列,结束列// sheet.addMergedRegion(new CellRangeAddress(rowIndex, rowIndex + 1, i, i)); } } workBook.write(out); out.flush(); out.close(); showShortToast("Excel文件保存到 :" + ROOT_PATH); } catch (Exception e) { e.printStackTrace(); showShortToast("Excel文件" + exFileName + "生成失败:" + e); } } public HSSFCellStyle getStyle(HSSFWorkbook workbook) { //设置样式; HSSFCellStyle style = workbook.createCellStyle(); //设置底边框; style.setBorderBottom(HSSFCellStyle.BORDER_THIN); //设置底边框颜色; style.setBottomBorderColor(HSSFColor.BLACK.index); //设置左边框; style.setBorderLeft(HSSFCellStyle.BORDER_THIN); //设置左边框颜色; style.setLeftBorderColor(HSSFColor.BLACK.index); //设置右边框; style.setBorderRight(HSSFCellStyle.BORDER_THIN); //设置右边框颜色; style.setRightBorderColor(HSSFColor.BLACK.index); //设置顶边框; style.setBorderTop(HSSFCellStyle.BORDER_THIN); //设置顶边框颜色; style.setTopBorderColor(HSSFColor.BLACK.index); //设置自动换行; style.setWrapText(false); //设置水平对齐的样式为居中对齐; style.setAlignment(HSSFCellStyle.ALIGN_CENTER); //设置垂直对齐的样式为居中对齐; style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); // 设置单元格字体 HSSFFont font = workbook.createFont(); font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); font.setFontName("宋体"); font.setFontHeight((short) 200); style.setFont(font); return style; }
- 注: 这里导入导出都是用的excel2003 (使用2007的每次都报错,暂时没有解决)
```java//intent.setType("*/*")格式大全 {".3gp", "video/3gpp"}, {".apk", "application/vnd.android.package-archive"}, {".asf", "video/x-ms-asf"}, {".avi", "video/x-msvideo"}, {".bin", "application/octet-stream"}, {".bmp", "image/bmp"}, {".c", "text/plain"}, {".class", "application/octet-stream"}, {".conf", "text/plain"}, {".cpp", "text/plain"}, {".doc", "application/msword"}, {".docx", "application/vnd.openxmlformats-officedocument.wordprocessingml.document"}, {".xls", "application/vnd.ms-excel"}, {".xlsx", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"}, {".exe", "application/octet-stream"}, {".gif", "image/gif"}, {".gtar", "application/x-gtar"}, {".gz", "application/x-gzip"}, {".h", "text/plain"}, {".htm", "text/html"}, {".html", "text/html"}, {".jar", "application/java-archive"}, {".java", "text/plain"}, {".jpeg", "image/jpeg"}, {".jpg", "image/jpeg"}, {".js", "application/x-javascript"}, {".log", "text/plain"}, {".m3u", "audio/x-mpegurl"}, {".m4a", "audio/mp4a-latm"}, {".m4b", "audio/mp4a-latm"}, {".m4p", "audio/mp4a-latm"}, {".m4u", "video/vnd.mpegurl"}, {".m4v", "video/x-m4v"}, {".mov", "video/quicktime"}, {".mp2", "audio/x-mpeg"}, {".mp3", "audio/x-mpeg"}, {".mp4", "video/mp4"}, {".mpc", "application/vnd.mpohun.certificate"}, {".mpe", "video/mpeg"}, {".mpeg", "video/mpeg"}, {".mpg", "video/mpeg"}, {".mpg4", "video/mp4"}, {".mpga", "audio/mpeg"}, {".msg", "application/vnd.ms-outlook"}, {".ogg", "audio/ogg"}, {".pdf", "application/pdf"}, {".png", "image/png"}, {".pps", "application/vnd.ms-powerpoint"}, {".ppt", "application/vnd.ms-powerpoint"}, {".pptx", "application/vnd.openxmlformats-officedocument.presentationml.presentation"}, {".prop", "text/plain"}, {".rc", "text/plain"}, {".rmvb", "audio/x-pn-realaudio"}, {".rtf", "application/rtf"}, {".sh", "text/plain"}, {".tar", "application/x-tar"}, {".tgz", "application/x-compressed"}, {".txt", "text/plain"}, {".wav", "audio/x-wav"}, {".wma", "audio/x-ms-wma"}, {".wmv", "audio/x-ms-wmv"}, {".wps", "application/vnd.ms-works"}, {".xml", "text/plain"}, {".z", "application/x-compress"}, {".zip", "application/x-zip-compressed"}
0 0
- [Android]导入导出Excel表格到本地SQLite
- 导出excel表格到本地
- Android实现导出数据库到Excel表格
- 导出到excel表格
- 导出到excel表格
- 导出到excel表格
- 导出excel表格到本地服务器, 远程下载 Java
- 导出excel表格,导入excel表格
- 如何使用POI导入导出到excel表格
- Android开发: 将Sqlite数据库导入Excel表格当中
- 导出excel到本地
- Java导入导出Excel表格
- Java导入导出Excel表格
- java导入导出excel表格
- php导入导出excel表格
- Excel表格导入和导出
- excel表格的导入导出
- java excel表格导入导出
- Spring 3整合Quartz 2实现定时任务三:动态暂停 恢复 修改和删除任务
- openlayer绘图时禁止移动地图的两种方式
- memcache压测
- 表变量与临时表的区别和联系
- 一般现在常见的网站攻击方式
- [Android]导入导出Excel表格到本地SQLite
- 实习第一周(第三天)(linux如何查看变量,read命令,通配符, 撷取命令: cut, grep,sort,wc,uniq等等)
- 大数定律
- UML学习笔记(五)--顺序图
- mysql取出大于3的赞评论(取出热门评论),然后其余的按时间先后顺序
- 鉴黄那些事
- SVM 基本概念及Python实现方式
- ActionContext和ServletActionContext区别以及action访问servlet API的三种方法
- mysql 的 find_in_set函数使用方法,【根据用户选择的文章分类类型去匹配文章数据】