我刚刚开始在Visual Studio 2022 Preview中开发Xamarin。我正在开发一个读取Excel或CSV文件的应用程序,为此我选择使用ExcelDataReader。
尽管按照文档中的指导方针添加了对CodePages的支持,但我仍然收到了1252编码的"NotSupportedException"。我尝试了很多方法,但仍然无法解决这个问题,有人看到过这个问题并设法找到了解决方案吗?
从Visual Studio提供的Xamarin Forms模板开始我的项目,我添加了一个页面,页面顶部有一个按钮,下面有一个列表空间,按钮启动一个文件选择器,允许用户选择他们的excel文件,然后将文件路径传递给一个数据服务对象,该对象打开文件并将其读入数据集,一切都很顺利,直到读取文件。我可能会补充说,我已经尝试了. xlsx和. csv文件,并使用Xamarin. Essentials FilePicker选择一个存储在我的Google Drive上的文件(现在在Android模拟器文件本地)。
使用Nuget包管理器控制台,我添加了对ExcelDataareader、ExcelDataReader.Dataset扩展和System.Text.Encoding.CodePages(版本6)的引用。这反映在项目依赖关系中。
我已经将注册行添加到App构造函数中。
public App()
{
System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance);
InitializeComponent();
DependencyService.Register<MockDataStore>();
DependencyService.Register<WasteDataStore>(); // My Data store
MainPage = new AppShell();
}
下面是数据存储中的文件读取器方法。
private async Task<DataSet> ReadXlsx(string filePath)
{
DataSet data = new DataSet();
try
{
// Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); // Uncommenting here has no effect.
using (FileStream stream = File.Open(filePath, FileMode.Open, FileAccess.Read))
{
// Fails here with System.NotSupportedException Encoding 1252 data could not be found.
using (var reader = ExcelReaderFactory.CreateReader(stream, new
ExcelReaderConfiguration(){ FallbackEncoding = Encoding.GetEncoding(1252)}))
{
data = reader.AsDataSet(new ExcelDataSetConfiguration()
ConfigureDataTable = (_) => new ExcelDataTableConfiguration()
{ UseHeaderRow = true }});
}
}
}
catch (Exception ex) {
Console.WriteLine(ex.ToString());
}
return await Task.FromResult(data);
}
我尝试过旧版本的ExcelDataReader和CodePages,以及将注册行放置在ReadXlsx函数中。我还尝试过使用"Dotnet Restore",它运行正常,但没有可见的效果。
我希望保留ExcelDataReader的原因是,我喜欢使用AsDataSet功能而不是自己编写功能的想法。如果能在这方面得到任何帮助,我将不胜感激。
1条答案
按热度按时间8cdiaqws1#
来自https://github.com/ExcelDataReader/ExcelDataReader#important-note-on-net-core
若要修复此问题,请将依赖项添加到System.Text.Encoding.CodePages包,然后添加代码以在应用程序初始化期间注册代码页提供程序