0
我需要使用包含宏的现有Excel文件,我需要编写一些数据,激活一些宏,然后从UWP应用程序的Excel文件中读取结果。 我需要避免任何商业图书馆,获得所需结果的最佳方法是什么?在UWP上读取和写入Excel
谢谢
我需要使用包含宏的现有Excel文件,我需要编写一些数据,激活一些宏,然后从UWP应用程序的Excel文件中读取结果。 我需要避免任何商业图书馆,获得所需结果的最佳方法是什么?在UWP上读取和写入Excel
谢谢
实际使用像syncfusion第三方库来实现,这可能是一个很好的方式。由于您避开任何您可能需要自己编写库的库,因为据我所知,根据this thread,目前没有开放库。
excel文件格式.xlsx
可能是一个.zip
包,您应该能够解压缩它,并且您会在文件夹内找到很多.xml
格式的文件。在uwp中,我们有用于读取xml文件的API。所以你可以用这些XML文件进行读写操作。
对于如何在uwp应用程序中解压缩文件,您应该可以使用ZipArchive
类。例如减压的一个Excel文件,并得到一张可能如下:
private async void btnopenfile_Click(object sender, RoutedEventArgs e)
{
FileOpenPicker opener = new FileOpenPicker();
opener.ViewMode = PickerViewMode.Thumbnail;
opener.FileTypeFilter.Add(".xlsx");
opener.FileTypeFilter.Add(".xlsm");
StorageFile file = await opener.PickSingleFileAsync();
if (file != null)
{
using (var fileStream = await file.OpenReadAsync())
{
using (ZipArchive archive = new ZipArchive(fileStream.AsStream(), ZipArchiveMode.Read))
{
worksheet = this.GetSheet(archive, "sheet1");
}
}
}
}
private XmlDocument GetSheet(ZipArchive archive, string sheetName)
{
XmlDocument sheet = new XmlDocument();
ZipArchiveEntry archiveEntry = archive.GetEntry("xl/worksheets/" + sheetName + ".xml");
using (var archiveEntryStream = archiveEntry.Open())
{
using (StreamReader reader = new StreamReader(archiveEntryStream))
{
string xml = reader.ReadToEnd();
txtresult.Text = xml;
sheet.LoadXml(xml);
}
}
return sheet;
}
对于如何读写XML文件,您可以参考XmlDocument
官方样片。例如,你可能需要通过代码读取的一个节点,如下所示(此方法不能直接读取片材中的值,但值地址):
private string ReadCell(XmlDocument worksheet, string cellAddress)
{
string value = string.Empty;
XmlElement row = worksheet.SelectSingleNodeNS("//x:c[@r='" + cellAddress + "']", "xmlns:x=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\"") as XmlElement;
if (row != null)
{
value = row.InnerText;
}
return value;
}
有上this thread在完整阅读样品可以参考。更详细的功能请自行开发。
谢谢您的建议,我已经尝试过WinRT解决方案,但问题是我需要触发Excel文件中的公式和宏,读取或写入zip内的xml不会触发任何东西... – BitFlow