Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/180.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在android中从外部存储读取excel文件?_Java_Android_Excel - Fatal编程技术网

Java 如何在android中从外部存储读取excel文件?

Java 如何在android中从外部存储读取excel文件?,java,android,excel,Java,Android,Excel,我编写了一个代码,将从excel文件(.xls)生成图形,这将非常好地工作,但我必须将文件放在assets文件夹中。现在我想从外部存储器访问文件 XML代码: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-a

我编写了一个代码,将从excel文件(.xls)生成图形,这将非常好地工作,但我必须将文件放在assets文件夹中。现在我想从外部存储器访问文件

XML代码:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.pratiksonigra.graphexcel.MainActivity">

<com.jjoe64.graphview.GraphView
    android:layout_width="wrap_content"
    android:layout_height="350dp"
    android:paddingRight="20dp"
    android:paddingLeft="20dp"
    android:id="@+id/graph1"/>

<Button
    android:id="@+id/button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Refresh"
    android:layout_below="@+id/graph1"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="10dp" />

JAVA代码:

package com.example.pratiksonigra.graphexcel;
import android.content.res.AssetManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import com.jjoe64.graphview.GraphView;
import com.jjoe64.graphview.series.BarGraphSeries;
import com.jjoe64.graphview.series.DataPoint; 
import com.jjoe64.graphview.series.LineGraphSeries;
import java.io.InputStream;
import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
public class MainActivity extends AppCompatActivity {
LineGraphSeries<DataPoint> series;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    Button btn = (Button) findViewById(R.id.button);
    final GraphView graph = (GraphView) findViewById(R.id.graph1);
    graph.getViewport().setXAxisBoundsManual(true);
    graph.getViewport().setYAxisBoundsManual(true);
    graph.getViewport().setMinX(0);
    graph.getViewport().setMaxX(10);
    graph.getViewport().setMaxY(40);
    graph.getViewport().setMinY(0);

    btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            try {
                graph.removeAllSeries();
                AssetManager am = getAssets();
                InputStream is = am.open("book.xls");
                Workbook wb = Workbook.getWorkbook(is);
                Sheet s = wb.getSheet(0);
                Cell z = s.getCell(0, 0);
                int row = s.getRows();
                int col = s.getColumns();
                double x, y;
                x = 0.0;
                y = 0.0;

                series = new LineGraphSeries<DataPoint>();

                for (int i = 0; i < row; i++) {
                    for (int j = 0; j < col; j++) {
                        z = s.getCell(j, i);
                        if (j % 2 == 0) {
                            x = Double.parseDouble(z.getContents());
                        } else {
                            y = Double.parseDouble(z.getContents());
                        }
                    }
                    series.appendData(new DataPoint(x, y), true, 15);
                }
                graph.addSeries(series);
            } catch (Exception e) {

            }
        }
    });
}

public boolean onSupportNavigateUp() {
    finish();
    return true;
}
package com.example.pratiksonigra.graphexcel;
导入android.content.res.AssetManager;
导入android.support.v7.app.AppActivity;
导入android.os.Bundle;
导入android.view.view;
导入android.widget.Button;
导入android.widget.TextView;
导入com.jjoe64.graphview.graphview;
导入com.jjoe64.graphview.series.BarGraphSeries;
导入com.jjoe64.graphview.series.DataPoint;
导入com.jjoe64.graphview.series.LineGraphSeries;
导入java.io.InputStream;
进口jxl.Cell;
进口jxl.Sheet;
导入jxl.工作簿;
公共类MainActivity扩展了AppCompatActivity{
线条系列;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
按钮btn=(按钮)findViewById(R.id.Button);
最终图形视图图形=(图形视图)findViewById(R.id.graph1);
graph.getViewport().setXAxisBoundsManual(true);
graph.getViewport().setYAxisBoundsManual(true);
graph.getViewport().setMinX(0);
graph.getViewport().setMaxX(10);
graph.getViewport().setMaxY(40);
graph.getViewport().setMinY(0);
btn.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
试一试{
graph.removeAllSeries();
AssetManager am=getAssets();
InputStream=am.open(“book.xls”);
工作簿wb=Workbook.getWorkbook(is);
表s=wb.getSheet(0);
单元z=s.getCell(0,0);
int row=s.getRows();
int col=s.getColumns();
双x,y;
x=0.0;
y=0.0;
系列=新的LineGraphSeries();
对于(int i=0;i

}

据我所知,您希望从手机内部存储动态选择文件

然后你需要在你的应用程序中安装一个文件浏览器,允许用户浏览和选择文件

请参阅:


希望这有帮助。

有问题吗?它工作正常,但我想动态选择文件,而不是将其放入资产文件夹。但问题是什么?只需像现在一样打开(文件)InputStream。