【问题标题】:how to open an excel file from assets folder如何从assets文件夹中打开一个excel文件
【发布时间】:2014-04-30 12:26:50
【问题描述】:

我正在尝试使用 excel 库从 assets 文件夹中打开一个 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)

【问题讨论】:

  • 粘贴完整的MainActivity 代码,因为我们无法找到第 29 行的内容

标签: android excel file android-intent


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    你可以这样试试。比如

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

    如果您对上述代码有任何疑问。请关注此How to read files (Images or text files) from Assets folder?

    【讨论】:

    • 嘿,kablu,我只是想打开 excel 文件查看它而已,我该如何实现呢?
    猜你喜欢
    • 1970-01-01
    • 2013-06-29
    • 2015-11-09
    • 2021-10-17
    • 2018-02-15
    • 2013-02-26
    • 1970-01-01
    • 2017-12-03
    • 2021-10-22
    相关资源
    最近更新 更多