含盐量过高的鱼 2023-05-29 15:28 采纳率: 50%
浏览 35

android读取大量数据的excel

在Android中读取xlsx文件,使用apache-poi读取文件的时候会内存溢出,查资料说是数据量大会导致内存溢出。使用easyExcel和monitorjbl每次都会出现一堆问题,网上查资料我都查不到,能帮助下或提供可用的demo吗

  • 写回答

2条回答 默认 最新

  • 蓝色心灵-海 2023-05-29 15:47
    关注

    在 Android 中读取 Excel 文件并不是一件容易的事情,因为 Excel 文件通常很大,可能会导致内存溢出。Apache POI 库通常用于读写 Excel 文件,但是它在 Android 系统上的内存处理效率较低,易导致内存溢出。因此,我们可以选择使用其他库来读取 Excel 文件,比如 jExcelApi 和 ExcelReader 等。下面提供使用 jExcelApi 读取 Excel 文件的示例代码,供参考:

    1. 导入 jExcelApi 库
      将以下依赖添加到模块的 build.gradle 文件中:
      implementation 'net.sourceforge.jexcelapi:jxl:2.6.12'
    2. 读取 Excel 文件
      以下是读取 Excel 文件的代码示例:
    public class ReadExcelActivity extends AppCompatActivity {
      private Button btnReadExcel;
      private TextView tvShowExcelData;
      private Workbook workbook;
      private Sheet sheet;
      private int rows;
      private int columns;
       @Override
      protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_read_excel);
         btnReadExcel = findViewById(R.id.btn_read_excel);
        tvShowExcelData = findViewById(R.id.tv_show_excel_data);
         btnReadExcel.setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View v) {
            readExcel();
          }
        });
      }
       private void readExcel() {
        try {
          InputStream inputStream = getAssets().open("test.xls");
          workbook = Workbook.getWorkbook(inputStream);
          sheet = workbook.getSheet(0);
           rows = sheet.getRows();
          columns = sheet.getColumns();
           StringBuilder sb = new StringBuilder();
           for (int i = 0; i < rows; i++) {
            for (int j = 0; j < columns; j++) {
              Cell cell = sheet.getCell(j, i);
              sb.append(cell.getContents()).append("\t");
            }
            sb.append("\n");
          }
           tvShowExcelData.setText(sb.toString());
         } catch (IOException e) {
          e.printStackTrace();
        } catch (BiffException e) {
          e.printStackTrace();
        } finally {
          workbook.close();
        }
      }
    }
    
    

    上述代码读取 Excel 文件 test.xls ,并将其显示在 TextView 中。这段代码使用了 jExcelApi 库,这个库的运行效率比 Apache POI 库要高,可以有效避免内存溢出的问题。
    希望上述代码可以帮助你解决问题,如果仍然有问题或其他疑问,请随时提出。

    评论

报告相同问题?

问题事件

  • 创建了问题 5月29日

悬赏问题

  • ¥15 孟德尔随机化结果不一致
  • ¥20 求用stm32f103c6t6在lcd1206上显示Door is open和password:
  • ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
  • ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
  • ¥15 谁有desed数据集呀
  • ¥20 手写数字识别运行c仿真时,程序报错错误代码sim211-100
  • ¥15 关于#hadoop#的问题
  • ¥15 (标签-Python|关键词-socket)
  • ¥15 keil里为什么main.c定义的函数在it.c调用不了
  • ¥50 切换TabTip键盘的输入法