欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

excel函数怎么用android,在Android中阅读Excel

发布时间:2023/12/10 34 豆豆
生活随笔 收集整理的这篇文章主要介绍了 excel函数怎么用android,在Android中阅读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文件的界面:

https://rogerkeays.com/simple-android-file-chooser

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);

}

创作挑战赛新人创作奖励来咯,坚持创作打卡瓜分现金大奖

总结

以上是生活随笔为你收集整理的excel函数怎么用android,在Android中阅读Excel的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。