【问题标题】:Adding a table to an existing excel file with spreadsheetgear使用电子表格将表格添加到现有的 excel 文件
【发布时间】:2020-01-06 09:38:00
【问题描述】:

我使用 Spreadsheetgear 将自定义 SQL 查询的结果导出为 excel 文件。

现在我想改进这个系统:用户将能够将 excel 模板文件上传到数据库中(目前为 varbinary)。例如,它可能有一个包含计算的工作表,然后在将数据导出到该模板时,它将使用来自查询的数据表填充另一个工作表。

电子表格可以做到这一点吗?如果是这样,它是如何工作的 - 主要是如何将现有的 excel 文件加载为 Spreadsheetgear 工作簿/工作簿集?我在他们的文档中找不到任何东西(尽管我仍在寻找)。

编辑:已解决。 我手动创建工作簿,从数据库中加载模板作为字节 [],然后使用 OpenFromMemory 函数打开所述模板:


// Create workbookSet
SpreadsheetGear.IWorkbookSet workbookSet = SpreadsheetGear.Factory.GetWorkbookSet();
// Create a new empty workbook in the workbookSet.
SpreadsheetGear.IWorkbook workbook = workbookSet.Workbooks.Add();

if(TemplateID != -1) // If this case requires a template
{
    // Get template from SQL database (.xlsx stored as varbinary(max))
    byte[] template = GetTemplateByID(VorlagenID);
    workbook = workbookSet.Workbooks.OpenFromMemory(template);
}

// Create export worksheet
SpreadsheetGear.IWorksheet worksheet = workbook.Worksheets[0];
worksheet.Name = "Export";
[...]

在我的例子中,模板总是使用 Worksheet[1],但是为导出创建 Worksheet[1] 应该很容易。

【问题讨论】:

    标签: c# .net spreadsheetgear


    【解决方案1】:

    是的,可以使用 SpreadsheetGear 设置预先构建的模板文件。我们使用 .NET / C# / MSSSQL 广泛使用它。该方法允许您创建非常复杂的模板,然后简单地添加所需的数据。这当然包括您在模板中构建的任何计算。

    方法 1 - 将模板存储在网络服务器上,提取创建的用户电子表格并将其写入网络服务器上的文件夹。返回文件名以允许通过代码或用户从服务器中提取。

            public static String SaveTemplateSpreadsheetToServer()
            {
                // Open the workbook.
                var templatename = HostingEnvironment.MapPath("~/Files/MyTemplate.xlsx");
    
                var workbook = Factory.GetWorkbook(templatename );
    
                // Read and write to the spreadsheet
    
                // Save a copy to disk and return filename       
                var filename = "The_exported_file.xlsx";
                var filePath = HostingEnvironment.MapPath("~/FilesTemp/" + filename);
                workbook.SaveAs(filePath, FileFormat.OpenXMLWorkbook);
    
                 // close workbook
                 workbook.Close();
    
                // Return the filename 
                return fileName;
            }
    

    方法2:将模板存储在网络服务器上,提取修改后的电子表格并将其保存为字节数组。直接下载附件

            public static byte[] SaveTemplateSpreadsheetToServer()
            {
                // Open the workbook.
                var templatename = HostingEnvironment.MapPath("~/Files/MyTemplate.xlsx");
    
                var workbook = Factory.GetWorkbook(templatename );
    
                // Read and write to the spreadsheet
    
                // Save as byte array and send to user
                var byteArray = workbook.SaveToMemory(FileFormat.OpenXMLWorkbook);
    
                // close workbook
                workbook.Close();
    
                // Return the byte array
                return byteArray;
            }
    

    我们已经对保存在数据库中的二进制模板文件做了一些工作,但发现在 Web 服务器上使用物理模板文件更方便。更容易管理对模板的更改。

    我唯一要注意的是避免使用包含大量“垃圾”的非常大的模板(例如图像)。在读/写/导出活动之前将文件加载到内存中所花费的时间会影响该进程。小于 1MB 是理想的,小于 2MB 是可管理的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-16
      • 1970-01-01
      • 2016-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多