目前我正在开发android开发.根据要求,应用程序应该能够读取Excel文件以进行数据输入.

正如其他人从这个主题开始,我已经完成了Java Excel Api和Apache POI,但两者都需要进行一些修改以满足我的要求:

JExcel API:

– 不能支持XLSX

Apache POI:

– 支持XLS文件

– 要在Dalvik中支持XLSX,您需要克服64K和javax库,或使用端口版本(即从Andrew Kondratev开始)

– 文件大小将增加2.4MB

但是我们还有其他选择在Android 4或更低版本中使用Excel文件吗?

解决方法:

对于那些需要使用全功能excel文件(即绘图,VBA等等)的应用程序,你应该使用Apache POI,它很简单,但现在仍然是最好的解决方案.

但是,如果您只需要阅读Excel,那么使用JavaScript解决方案可能会更好.使用js-xlsx库,您可以将Excel文件传输到JSON.库大小很小,只有395KB(仅包括xlsx.core.min.js)

我相信这不是最好的解决方案:

– WebView需要使用UI Thread,它可能会在读取大型Excel文件时阻止UI.

– 性能问题

但您可以将其更改为其他JavaScript引擎(如Rhino或V8)以解决这些问题.

这是代码

回调接口:

public interface ExcelReaderListener {

void onReadExcelCompleted(List stringList);

}

主要活动:

private ProgressDialog progressDialog;

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

new AlertDialog.Builder(MainActivity.this)

.setMessage("message")

.setTitle("title")

.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface dialog, int which) {

dialog.dismiss();

new FileChooser(MainActivity.this, new String[]{"xls", "xlsx"})

.setFileListener(new FileChooser.FileSelectedListener() {

@Override

public void fileSelected(File file) {

progressDialog = new ProgressDialog(MainActivity.this);

progressDialog.setTitle("title");

progressDialog.setMessage("message");

progressDialog.setIndeterminate(true);

progressDialog.setCanceledOnTouchOutside(false);

Toast.makeText(MainActivity.this, file.getName(), Toast.LENGTH_SHORT).show();

String filePath = file.getAbsolutePath();

ExcelReaderListener excelReaderListener = MainActivity.this;

progressDialog.show();

try {

final WebView webView = new WebView(MainActivity.this);

new JSExcelReader(filePath, webView, excelReaderListener);

} catch (Exception ex) {

Log.e("Import excel error", ex.getMessage());

}

}

})

.showDialog();

}

})

.show();

}

@Override

public void onReadExcelCompleted(List stringList) {

Toast.makeText(MainActivity.this, "Parse Completed", Toast.LENGTH_SHORT).show();

if (progressDialog != null && progressDialog.isShowing()) {

progressDialog.dismiss();

}

// Write into DB

...

}

用户选择excel文件的界面:

JSExcelReader :(读取excel并将其转换为ArrayList的核心部分)

public class JSExcelReader {

private ExcelReaderListener callback;

public JSExcelReader(String filePath, final WebView webView, ExcelReaderListener callback) {

this.callback = callback;

File file = new File(filePath);

try (InputStream is = new FileInputStream(file)) {

// convert file to Base64

if (file.length() > Integer.MAX_VALUE)

Log.e("File too big", "file too big");

byte[] bytes = new byte[(int) file.length()];

int offset = 0;

int numRead;

while (offset < bytes.length &&

(numRead = is.read(bytes, offset, bytes.length - offset)) >= 0) {

offset += numRead;

}

if (offset < bytes.length)

throw new Exception("Could not completely read file");

final String b64 = Base64.encodeToString(bytes, Base64.NO_WRAP);

// feed the string into webview and get the result

WebSettings webSettings = webView.getSettings();

webSettings.setJavaScriptEnabled(true);

webView.loadUrl("file:///android_asset/AndroidParseExcel.html");

webView.setWebViewClient(new WebViewClient() {

public void onPageFinished(WebView view, String url) {

webView.evaluateJavascript("convertFile('" + b64 + "');", new ValueCallback() {

@Override

public void onReceiveValue(String value) {

parseJSON(value);

}

});

}

});

} catch (Exception ex) {

Log.e("Convert Excel failure", ex.getMessage());

}

}

private void parseJSON(String jsonString) {

try {

// return value is something like "{\n\"Sheet1\":\n[\"title\"...

// you need to remove those escape character first

JSONObject jsonRoot = new JSONObject(jsonString.substring(1, jsonString.length() - 1)

.replaceAll("\\\\n", "")

.replaceAll("\\\\\"", "\"")

.replaceAll("\\\\\\\\\"", "'"));

JSONArray sheet1 = jsonRoot.optJSONArray("Sheet1");

List stringList = new ArrayList<>();

JSONObject jsonObject;

for (int i = 0; i < sheet1.length(); i++) {

jsonObject = sheet1.getJSONObject(i);

stringList.add(jsonObject.optString("title"));

}

callback.onReadExcelCompleted(stringList);

} catch (Exception ex) {

Log.e("Error in parse JSON", ex.getMessage());

}

}

}

AndroidParseExcel.html :(你应该把这个和JavaScript库放到资产文件夹中)

"use strict";

var X = XLSX;

function convertFile(b64data) {

var wb = X.read(b64data, {type: 'base64',WTF: false});

var result = {};

wb.SheetNames.forEach(function(sheetName) {

var roa = X.utils.sheet_to_row_object_array(wb.Sheets[sheetName]);

if(roa.length > 0){

result[sheetName] = roa;

}

});

return JSON.stringify(result, 2, 2);

}

标签:jexcelapi,android,excel,apache-poi

来源: https://codeday.me/bug/20190727/1553770.html

excel函数中if android,在Android中阅读Excel相关推荐

  1. excel函数:汉字转全拼_星期五的Excel函数:带过滤器的小计和总和

    excel函数:汉字转全拼 Last week, we used the Excel SUBTOTAL function to sum items in a filtered list, while ...

  2. 15个常用excel函数公式_项目上最常用的Excel函数公式大全,现在看还不晚

    做工程的免不了要做资料算量,Excel是工作中最常用的工具之一.只要搞清楚它的一些使用小技巧,工作效率那是嗖嗖的往上蹭啊.下面这些,你就绝对不能错过! 一.数字处理 1.取绝对值 =ABS(数字) 2 ...

  3. 15个常用excel函数公式_excel表格时间和日期应用 – Excel常用函数公式及技巧

    excel表格时间和日期应用 – Excel常用函数公式及技巧 自动显示当前日期公式 =YEAR(NOW()) 当前年 =MONTH(NOW()) 当前月 =DAY((NOW())) 当前日 如何在单 ...

  4. 计算机二级考试中Excel函数如何应用,计算机二级考试excle常用函数【计算机二级ms office中excel中必考函数有哪些?】...

    计算机二级excel主要函数的用法 AVERAGE 求出所有参数的术平均值. 数据计算 COLUMN 显示所引用单元格的列标号值. 显示位置 CONCATENATE 将多个字符文本或单元格中的数据连接 ...

  5. Excel函数应用之查询与引用函数

    编者语:Excel是办公室自动化中非常重要的一款软件,很多巨型国际企业都是依靠Excel进行数据管理.它不仅仅能够方便的处理表格和进行图形分析,其更强大的功能体现在对数据的自动处理和计算,然而很多缺少 ...

  6. 用函数统计各分数段人数c语言,excel统计各分数段人数的函数

    Q2:如何使用Excel函数统计各分数段的人数 "使用Excel函数统计各分数段的人数"的操作步骤是: 1.打开Excel工作表: 2.由已知条件可知,需要将B2:B34单元格的分 ...

  7. Excel函数应用之统计函数

    编者语:Excel是办公室自动化中非常重要的一款软件,很多巨型国际企业都是依靠Excel进行数据管理.它不仅仅能够方便的处理表格和进行图形分析,其更强大的功能体现在对数据的自动处理和计算,然而很多缺少 ...

  8. Excel函数公式:IF函数和AND、OR函数的组合多条件判断技巧

    经常使用Excel函数的小伙伴们都知道,在Excel中使用频率最高的还是那些比较简单的函数,其中IF函数就是高频率函数之一,那么,能不能用IF函数来进行多条件运算呢? 一.IF+AND:同时满足多个条 ...

  9. Excel函数应用之工程函数

    编者语:Excel是办公室自动化中非常重要的一款软件,很多巨型国际企业都是依靠Excel进行数据管理.它不仅仅能够方便的处理表格和进行图形分析,其更强大的功能体现在对数据的自动处理和计算,然而很多缺少 ...

  10. oracle 计算平方,次方,一个实用的Excel函数,Power函数公式完成平方、立方及N次方运算...

    一个实用的Excel函数,Power函数公式完成平方.立方及N次方运算 今天我们来学习如何利用Excel函数,进行数据的平方.立方等数据运算.相信对于许多同学来讲,这样的数据运算一般都是用电脑计算器来 ...

最新文章

  1. 提高建模效率,改变手工作坊式生产,AutoML的技术研究与应用进展如何了?
  2. 802.11 MESH WLANs
  3. 使用静态库.framework注意事项
  4. httpClient3.1 笔记
  5. CodeForces 518A - Chewbaсca and Number(思路)
  6. 关于Metasploit开发环境的搭建
  7. VueJS ReactJS 如何?听听别人怎么说。
  8. java写的一个zip压缩源码错误分析
  9. 1.three.js世界的4大要素
  10. C++中时间相关函数的使用
  11. 能从入门到精通的 Docker 学习指南
  12. RuiJi Scraper基础 – RuiJi表达式模型
  13. 多说评论如何显示最近访客
  14. Android开发学习之路-带文字的图片分享
  15. 自媒体采集平台免费,免费的自媒体采集平台
  16. win10写java工具_推荐三款录屏工具:也许是电脑录屏最实用的软件
  17. 8086汇编语言:8086CPU寄存器的相关介绍
  18. Arduino UNO+OLED可视化音乐频谱:32段分频0.96寸OLED显示细条频谱线
  19. 如何在网上挣钱,这几个项目让你月入过万元
  20. 时间触发以太网TTE

热门文章

  1. TOTP 介绍及基于 C# 的简单实现
  2. dotnet core 微服务教程
  3. SignalR第一节-在5分钟内完成通信连接和消息发送
  4. 开源库Magicodes.Storage正式发布
  5. Docker打包 Asp.Net Core应用,在CentOS上运行
  6. .NET的一点历史故事:作者的一些感想
  7. C#将WebBowser控件替换为Chrome内核
  8. 用.net core 写后端—— c++外的另一种选择?
  9. asp.net MVC 应用程序的生命周期
  10. 元宇宙行业深度研究报告:为什么元宇宙是下一代互联网?