网站建设视频讲解,win2003服务器网站管理工具,杭州网站建设岗位薪资,做满屏网站的尺寸在现代的移动应用开发中#xff0c;数据的处理和管理是至关重要的一环。有时候#xff0c;我们需要从外部文件#xff08;如Excel文件#xff09;中导入数据#xff0c;以便在应用程序中使用。本文将介绍如何在Android应用中使用Java代码从一个Excel文件中导入数据到SQLit…在现代的移动应用开发中数据的处理和管理是至关重要的一环。有时候我们需要从外部文件如Excel文件中导入数据以便在应用程序中使用。本文将介绍如何在Android应用中使用Java代码从一个Excel文件中导入数据到SQLite数据库。
首先我们需要定义一个方法importFromExcelFile()这个方法将负责从指定的Excel文件中读取数据并将其插入到SQLite数据库中。以下是这个方法的详细实现 implementation ‘org.apache.poi:poi:5.2.3’ implementation ‘org.apache.poi:poi-ooxml:5.2.3’
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;private void importFromExcelFile() {// 获取下载目录File downloadsDir Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);// 指定Excel文件的名称此处为inventory.xlsFile file new File(downloadsDir, inventory.xls); // Replace with your XLS file name// 检查文件是否存在if (file.exists()) {try (FileInputStream fis new FileInputStream(file)) {// 使用HSSFWorkbook读取Excel文件适用于.xls格式Workbook workbook new HSSFWorkbook(fis);// 获取第一个工作表Sheet sheet workbook.getSheetAt(0);// 遍历工作表中的每一行for (Row row : sheet) {// 跳过标题行if (row.getRowNum() 0) {continue;}// 从单元格中读取数据String id getCellStringValue(row.getCell(0));String itemName getCellStringValue(row.getCell(1));String category getCellStringValue(row.getCell(2));String description getCellStringValue(row.getCell(3));int quantity (int) getCellNumericValue(row.getCell(4));double costPrice getCellNumericValue(row.getCell(5));double sellingPrice getCellNumericValue(row.getCell(6));// 准备数据插入到SQLite数据库ContentValues cv new ContentValues();cv.put(id, id);cv.put(itemname, itemName);cv.put(category, category);cv.put(description, description);cv.put(quantity, quantity);cv.put(costprice, costPrice);cv.put(sellingprice, sellingPrice);// 插入数据到数据库db.insert(inventory, null, cv);}// 提示用户数据已成功导入Toast.makeText(this, 数据已成功导入数据库, Toast.LENGTH_SHORT).show();// 刷新库存数据ids.clear();loadInventoryData();} catch (IOException e) {// 记录错误日志Log.e(ImportError, Error reading Excel file, e);// 提示用户读取Excel文件时出错Toast.makeText(this, 读取Excel文件时出错, Toast.LENGTH_SHORT).show();}} else {// 提示用户找不到Excel文件Toast.makeText(this, 找不到Excel文件, Toast.LENGTH_SHORT).show();}
}private void loadInventoryData() {ids.clear(); // Ensure the ids list is cleared before loading datatry {Cursor c db.rawQuery(SELECT id FROM inventory;, null);if (c ! null) {while (c.moveToNext()) {ids.add(c.getString(0));}c.close();} else {Log.e(loadInventoryData, Cursor is null);}inventoryAdapter new inventoryAdapter(ids, db, this);recyclerView.setAdapter(inventoryAdapter);} catch (Exception e) {Log.e(loadInventoryData, Error loading inventory data, e);Toast.makeText(inventory.this, Error loading inventory data: e.getMessage(), Toast.LENGTH_LONG).show();}}代码解析 获取下载目录和文件路径 使用Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)获取设备的下载目录。 创建一个指向inventory.xls文件的File对象。 检查文件是否存在 使用file.exists()方法检查文件是否存在。 读取Excel文件 使用FileInputStream读取Excel文件。 使用HSSFWorkbook适用于.xls格式读取Excel文件内容。 获取第一个工作表Sheet。 遍历工作表中的数据 使用for (Row row : sheet)遍历工作表中的每一行。 跳过第一行标题行。 使用自定义方法getCellStringValue和getCellNumericValue从单元格中读取字符串和数字值。 将数据插入SQLite数据库 使用ContentValues对象准备要插入的数据。 使用db.insert(“inventory”, null, cv)将数据插入到数据库的inventory表中。 提示用户操作结果 使用Toast提示用户数据已成功导入或读取文件时出错。 刷新库存数据 清除ids列表假设这是一个用于缓存数据的列表。 调用loadInventoryData()方法刷新库存数据。 注意事项 本示例使用HSSFWorkbook读取.xls格式的Excel文件。如果需要读取.xlsx格式的文件应使用XSSFWorkbook。 需要在AndroidManifest.xml中申请读取外部存储的权限READ_EXTERNAL_STORAGE。 在实际开发中可能需要更复杂的错误处理和用户交互逻辑。