VisualStudio 将xlsx文件嵌入到资源中访问时变String?
如题,就是这么诡异,时至如今已经是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);
再次吐槽三哥,你们把微软捣鼓得充满咖喱味。