首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用spreadsheetgear向现有的excel文件添加表

使用spreadsheetgear向现有的excel文件添加表
EN

Stack Overflow用户
提问于 2019-09-03 21:04:26
回答 1查看 278关注 0票数 1

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

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

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

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

代码语言:javascript
复制
// 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";
[...]

在我的例子中,模板总是使用Worksheet1,但是为导出创建一个Worksheet1应该很容易。

EN

回答 1

Stack Overflow用户

发布于 2019-09-04 06:51:11

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

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

代码语言:javascript
复制
        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;
        }

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

代码语言:javascript
复制
        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是可管理的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57772367

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档