繁体   English   中英

如何从资产文件夹打开Excel文件

[英]how to open an excel file from assets folder

我正在尝试使用excel库从资产文件夹中打开excel文件,但是应用程序崩溃了,我设法将两个代码彼此结合在一起,这就是为什么它无法正常工作的原因。 有什么帮助吗? 谢谢。

             public class MainActivity extends Activity {
              Button open;
        @Override
         protected void onCreate(Bundle savedInstanceState) 
        {
         super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        open=(Button)findViewById(R.id.button1);



          open.setOnClickListener(new View.OnClickListener() 
    {

        @Override
        public void onClick(View v) 
        {
            // TODO Auto-generated method stub
            File file = new File("file:///android_asset/data.xlsx");
            try {
                Workbook workbook = Workbook.getWorkbook(file);
            } catch (BiffException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } 
            MimeTypeMap map = MimeTypeMap.getSingleton();
            String ext = MimeTypeMap.getFileExtensionFromUrl(file.getName());
            String type = map.getMimeTypeFromExtension(ext);

            if (type == null)
               type = "*/*";

            Intent intent = new Intent(Intent.ACTION_VIEW);
            Uri data = Uri.fromFile(file);

            intent.setDataAndType(data, type);

            startActivity(intent);
        }
    });

错误

      04-30 15:22:54.642: E/AndroidRuntime(22148): FATAL EXCEPTION: main
      04-30 15:22:54.642: E/AndroidRuntime(22148): Process: com.ecxel, PID: 22148 
      04-30 15:22:54.642: E/AndroidRuntime(22148): java.lang.VerifyError: com/ecxel/MainActivity$1
      04-30 15:22:54.642: E/AndroidRuntime(22148):  at  com.ecxel.MainActivity.onCreate(MainActivity.java:29)
      04-30 15:22:54.642: E/AndroidRuntime(22148):  at android.app.Activity.performCreate(Activity.java:5312)
      04-30 15:22:54.642: E/AndroidRuntime(22148):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1111)
      04-30 15:22:54.642: E/AndroidRuntime(22148):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2552)
      04-30 15:22:54.642: E/AndroidRuntime(22148):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2653)
      04-30 15:22:54.642: E/AndroidRuntime(22148):  at android.app.ActivityThread.access$800(ActivityThread.java:156)
      04-30 15:22:54.642: E/AndroidRuntime(22148):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1355)
      04-30 15:22:54.642: E/AndroidRuntime(22148):  at android.os.Handler.dispatchMessage(Handler.java:102)
      04-30 15:22:54.642: E/AndroidRuntime(22148):  at android.os.Looper.loop(Looper.java:157)
      04-30 15:22:54.642: E/AndroidRuntime(22148):  at android.app.ActivityThread.main(ActivityThread.java:5872)
      04-30 15:22:54.642: E/AndroidRuntime(22148):  at java.lang.reflect.Method.invokeNative(Native Method)
      04-30 15:22:54.642: E/AndroidRuntime(22148):  at java.lang.reflect.Method.invoke(Method.java:515)
      04-30 15:22:54.642: E/AndroidRuntime(22148):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1069)
      04-30 15:22:54.642: E/AndroidRuntime(22148):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:885)

new File("file:///android_asset/data.xlsx")将不起作用。 资产不是文件; 它们只是您的APK文件ZIP存档中的条目。

如果您的库接受InputStream作为加载电子表格的源,请使用getResources().getAssets().open("data.xlsx")在电子表格上获取此类InputStream 否则,您将需要将该文件从资产复制到内部存储,以便可以将实际File提供给库。

您可以这样尝试。

    File file = new File(m.getInstrumentation().getContext().getExternalFilesDir(null), filename);
 FileInputStream fis = new FileInputStream(file);

要么

您可以尝试像这样的代码。

public class ReadFileAssetsActivity extends Activity {

    /** Called when the activity is first created. */

    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        TextView txtContent = (TextView) findViewById(R.id.txtContent);
        TextView txtFileName = (TextView) findViewById(R.id.txtFileName);
        ImageView imgAssets = (ImageView) findViewById(R.id.imgAssets);

        AssetManager assetManager = getAssets();

        // To get names of all files inside the "Files" folder
        try {
            String[] files = assetManager.list("Files");

            for(int i=0; i<files.length; i++)            {               txtFileName.append("\n File :"+i+" Name => "+files[i]);
            }
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }

        // To load text file
        InputStream input;
        try {
            input = assetManager.open("helloworld.txt");

             int size = input.available();
             byte[] buffer = new byte[size];
             input.read(buffer);
             input.close();

             // byte buffer into a string
             String text = new String(buffer);

             txtContent.setText(text);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        // To load image
        try {
            // get input stream
            InputStream ims = assetManager.open("android_logo_small.jpg");

            // create drawable from stream
            Drawable d = Drawable.createFromStream(ims, null);

            // set the drawable to imageview
            imgAssets.setImageDrawable(d);
        }
        catch(IOException ex) {
            return;
        }
    }
}

如果您对以上代码有任何疑问。 请按照此方法如何从Assets文件夹读取文件(图像或文本文件)?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM