You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android平台C# MAUI应用加载指定路径Excel文件求助

解决MAUI Android加载本地Excel文件的问题

核心问题分析

你遇到的问题根源在于:MAUI Android中Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)指向的是应用私有存储的文档目录,而非手机用户可见的公共「文档」文件夹;另外USB调试时的路径映射容易导致程序误访问电脑端路径。

解决方案步骤

1. 选择正确的文件路径

  • 若读取用户可见的公共文档文件夹,使用Android原生API获取路径:
    // 获取手机公共文档目录的绝对路径
    var publicDocsPath = Android.OS.Environment.GetExternalStoragePublicDirectory(Android.OS.Environment.DirectoryDocuments).AbsolutePath;
    var filePath = Path.Combine(publicDocsPath, "test3.xlsx");
    
  • 若读取应用私有文档目录,原代码路径是正确的,但需确认文件存放在/data/data/[你的应用包名]/files/Documents/(可通过Android Studio的Device File Explorer查看)。

2. 添加并申请存储权限

在Android项目的AndroidManifest.xml中添加权限声明:

<!-- 读取外部存储权限 -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<!-- Android 13+ 需添加媒体读取权限 -->
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />
<uses-permission android:name="android.permission.READ_MEDIA_AUDIO" />

在MAUI代码中动态申请权限:

using Microsoft.Maui.ApplicationModel;

// 加载文件前先申请权限
var status = await Permissions.RequestAsync<Permissions.StorageRead>();
if (status != PermissionStatus.Granted)
{
    await DisplayAlert("提示", "需要存储读取权限才能加载文件", "确定");
    return;
}

3. 修正后的完整加载代码

using GemBox.Spreadsheet;
using Microsoft.Maui.Controls;
using System.IO;
using Microsoft.Maui.ApplicationModel;

namespace Test4
{
    public partial class MainPage : ContentPage
    {
        static MainPage()
        {
            SpreadsheetInfo.SetLicense("FREE-LIMITED-KEY");
        }

        public MainPage()
        {
            InitializeComponent();
            _ = LoadExcelFileAsync();
        }

        private async Task LoadExcelFileAsync()
        {
            // 申请存储权限
            var status = await Permissions.RequestAsync<Permissions.StorageRead>();
            if (status != PermissionStatus.Granted)
            {
                await DisplayAlert("提示", "需要存储读取权限才能加载文件", "确定");
                return;
            }

            // 拼接公共文档目录下的文件路径
            var publicDocsPath = Android.OS.Environment.GetExternalStoragePublicDirectory(Android.OS.Environment.DirectoryDocuments).AbsolutePath;
            var filePath = Path.Combine(publicDocsPath, "test3.xlsx");

            if (File.Exists(filePath))
            {
                ExcelFile work_book = ExcelFile.Load(filePath);
                // 此处添加Excel文件的后续处理逻辑
            }
            else
            {
                await DisplayAlert("错误", "文件不存在,请确认文件已放入手机公共文档文件夹", "确定");
            }
        }
    }
}

4. 验证文件位置

通过USB将test3.xlsx复制到手机的「文档」文件夹(可通过手机自带文件管理器查看),确保路径匹配。

内容的提问来源于stack exchange,提问作者Killer Queen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 11:42:40