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