Android读取Excel后TextView仅显示最后一个单元格值的问题
解决Android读取Excel仅显示最后一个单元格的问题
嗨,这问题我之前也踩过坑!咱们来拆解下代码里的问题:
问题根源
- 内容被覆盖而非累加:你在循环里用了
xx = z.getContents();,这会直接把之前存的内容替换成当前单元格的值,最后自然只剩最后一个单元格的内容。 - 频繁更新UI导致覆盖:你把
textView.setText(xx);放在了内层循环里,每读一个单元格就更新一次TextView,前面的内容都会被后面的覆盖,最终只显示最后一次设置的内容。
修改后的代码
咱们调整拼接逻辑和setText的位置,就能显示所有单元格内容了:
textView=(TextView)findViewById(R.id.textview); textView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { try { AssetManager am = getAssets(); InputStream is = am.open("Book1.xls"); Workbook wb = null; try { wb = Workbook.getWorkbook(is); Sheet s = wb.getSheet(0); int row = s.getRows(); int col = s.getColumns(); StringBuilder xx = new StringBuilder(); // 用StringBuilder更高效 for (int i = 0; i < row; i++) { for (int c = 0; c < col; c++) { Cell z = s.getCell(c,i); xx.append(z.getContents()).append("\t"); // 累加内容,加制表符分隔单元格 } xx.append("\n"); // 每行结束加换行,区分不同行 } textView.setText(xx.toString()); // 循环结束后一次性设置文本 } catch (BiffException e) { e.printStackTrace(); } finally { // 记得关闭资源,避免内存泄漏 if (is != null) { try { is.close(); } catch (IOException e) { e.printStackTrace(); } } if (wb != null) { wb.close(); } } } catch (IOException e) { e.printStackTrace(); } } });
关键修改说明
- 改用
StringBuilder拼接内容:比直接用String累加更高效,尤其是数据量较大时 - 用
append()替代赋值:把每个单元格的内容累加到字符串里,添加制表符和换行让排版更清晰 - 把
textView.setText()移到循环外:等所有内容拼接完成后一次性设置,避免频繁更新UI导致的覆盖问题 - 增加资源关闭操作:养成良好的资源释放习惯,防止内存泄漏
这样修改后,TextView就能完整显示Excel里的所有单元格内容啦~
内容的提问来源于stack exchange,提问作者Madhusudan Pandey
相关产品推荐
相关产品推荐

