c# 预编译大数组或其他解决方案以将大数据嵌入可执行文件

标签 c#

我必须在我的应用程序中填写一个 excel 文件,打开、写入和关闭。

问题是该文件包含大量格式和宏(是公司模板),我意识到从 C# 重新生成这些文件非常困难,最重要的是,维护起来非常困难。

所以我用十六进制编辑器打开 excel 模板,将所有字节作为数组,像这样

namespace myapp
{

    public static class ReviewTemplate // exported with HXD
    {
        public static string name = "AS-04522-EN";
        public static byte[] rawData = {
    0xD0, 0xCF, 0x11, 0xE0, 0xA1, 0xB1, 0x1A, 0xE1, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x3E, 0x00, 0x03, 0x00, 0xFE, 0xFF, 0x09, 0x00, 0x06, 0x00, 0x00, 0x00,
...
...
...
}
}

然后,像这样从 C# 生成

File.WriteAllBytes(ReviewTemplate.name + DateTime.Now.ToString("_dd_MM_yyyy_HH_mm_ss") + ".xls", ReviewTemplate.rawData);

除了所有数组文件 (*.cs) 都有 15MB 并且当我双击 C# 中的任何函数名称进行重构或其他操作时,.NET 会挂起几分钟。

所以最大的问题是,我怎样才能以某种方式预编译这个 array.cs 文件,以便 .NET 按原样使用?也许把所有的都放在一些dll中?在 C 中,我使用 *.obj 文件。

已编辑

更清楚地说,在我生成所需的 excel(无论如何有 2.5MB)之后,我使用互操作打开、写入然后关闭。

是否可以嵌入所有这些数据并以某种方式写入内存,然后最终以 excel 文件形式保存在磁盘上?

谢谢,

最佳答案

如果您希望模板位于您的 .exe/dll 中,请将 .xls 添加到您的 C# 项目中,右键单击属性,将构建操作设置为“嵌入式资源”。

当您需要填写时,请调用 Assembly.GetManifestResourceStream打开该嵌入资源的流,然后使用 CopyTo而不是 WriteAllBytes。

更新:示例(未经测试)

Stream source = Assembly.GetExecutingAssembly().GetManifestResourceStream( ... );
string destName = "AS-04522-EN" + DateTime.Now.ToString("_dd_MM_yyyy_HH_mm_ss") + ".xls";
using( Stream dest = File.Create( destName ) )
    source.CopyTo( dest );

关于c# 预编译大数组或其他解决方案以将大数据嵌入可执行文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43616791/

相关文章:

c# - LambdaExpression 构造函数

C# - 无法在方法内声明委托(delegate)

c# - 如何将位图返回给浏览器 WebApi

c# - 有没有像样的 ADO.NET Helper 实用程序?

c# - 如何从列表中选择每第 6 个元素(使用 Linq)

c# - 将绑定(bind)的组合框添加到数据 GridView

c# - 错误 文件 'Resources/LaunchScreen.xib' 与 'Resources/LaunchScreen.xib' 冲突。 iOS Xamarin

c# - 将字符串转换为序号大写或小写

c# - 使用 OWIN 将 Web API 托管为 Windows 服务

c# - 访问 IEnumerable 的属性