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
相关产品推荐
相关产品推荐

