如題,就是這么詭異,時至如今已經是visual studio 2022了,你通過界面導入xlsx文件到資源中,它的類型就是String而且沒法修改! 即使將文件壓縮成zip再導入,依然是String! 三哥的騷操作問你服不服!
然而,經過各種嘗試后,找到一個迂回的實現方法:
- 在右側的解決方案中你的項目右鍵,添加->新建文件夾,名字為data
- 將你的excel文件拖到data中
- 選中這個文件然后呼出屬性,里面有一項"生成操作"(Build Action), 設置為嵌入的資源(或Embedded Resource)
- 用代碼訪問這個資源,我把它寫成一個通用方法:
/// <summary>
/// 獲取資源
/// </summary>
/// <param name="assembly"> Assembly assembly = Assembly.GetExecutingAssembly(); </param>
/// <param name="namespace_"></param>
/// <param name="resourcename"></param>
/// <returns></returns>
protected byte[] getResource(Assembly assembly,string resourcename)
{// 獲取當前程序集string[] resourceNames = assembly.GetManifestResourceNames();// 構造資源的完整名稱。格式通常是:默認命名空間.文件夾名.文件名 // 獲取資源流using (Stream stream = assembly.GetManifestResourceStream(resourcename)){if (stream != null){// 現在你可以像處理任何流一樣來處理這個文件,比如讀取到 byte[]byte[] buffer = new byte[stream.Length];stream.Read(buffer, 0, buffer.Length);return buffer;// buffer 現在包含了文件的二進制數據// 你可以對它進行任何操作,比如保存到本地文件// File.WriteAllBytes("path/to/save/file.bin", buffer);}return null;}
}
如何調用:
byte[] bytes = getResource(Assembly.GetExecutingAssembly(), "你的命名空間.data.你的文件.xlsx");
File.WriteAllBytes(savedlg.FileName, bytes);
再次吐槽三哥,你們把微軟搗鼓得充滿咖喱味。