Magicodes.IE icon indicating copy to clipboard operation
Magicodes.IE copied to clipboard

在通过模板导出数据时,如何通过一个模板将数据分散导出到多个Sheet中去

Open weiwxg opened this issue 4 years ago • 9 comments

如题

weiwxg avatar Nov 05 '20 08:11 weiwxg

您可以通过指定的条件,去将数据进行拆分到多个文件中,再将其以sheet的形式合并到指定的文件中。

            var data =await exporter.ExportBytesByTemplate<BookInfo>(null,null);
            Stream stream = new MemoryStream(data);
            using (var pck = new ExcelPackage(stream))
            {
                pck.Workbook.Worksheets.Add(sheetNameStr, workbook.Worksheets[1]);
            }

hueifeng avatar Nov 05 '20 10:11 hueifeng

对于非模板导出,可以通过如下属性设置每个sheet的大小

public int MaxRowNumberOnASheet { get; set; } = 0;

另外对于住家sheet或者追加row等等,可以通过如下方式:

exporter.Append(list1).SeparateByColumn().Append(list2).ExportAppendData(filePath);
exporter.Append(list1).SeparateBySheet().Append(list2).ExportAppendData(filePath);
exporter.Append(list1).SeparateByRow().AppendHeaders().Append(list2).ExportAppendData(filePath);

hueifeng avatar Nov 05 '20 10:11 hueifeng

您可以通过指定的条件,去将数据进行拆分到多个文件中,再将其以sheet的形式合并到指定的文件中。

            var data =await exporter.ExportBytesByTemplate<BookInfo>(null,null);
            Stream stream = new MemoryStream(data);
            using (var pck = new ExcelPackage(stream))
            {
                pck.Workbook.Worksheets.Add(sheetNameStr, workbook.Worksheets[1]);
            }

workbook.Worksheets[1]是哪来的?

weiwxg avatar Nov 13 '20 03:11 weiwxg

指定条件分为多个结果集,再去进行合并,workbook.Worksheets[1]为其他结果集.

hueifeng avatar Nov 13 '20 03:11 hueifeng

指定条件分为多个结果集,再去进行合并,workbook.Worksheets[1]为其他结果集.

请问 await exporter.ExportBytesByTemplete(...)的返回结果为byte[], 我该如何将其转化为pck.Workbook.Worksheets.Add所需要的ExcelWorksheet类型呢?

weiwxg avatar Nov 13 '20 06:11 weiwxg

您可以通过指定的条件,去将数据进行拆分到多个文件中,再将其以sheet的形式合并到指定的文件中。

            var data =await exporter.ExportBytesByTemplate<BookInfo>(null,null);
            Stream stream = new MemoryStream(data);
            using (var pck = new ExcelPackage(stream))
            {
                pck.Workbook.Worksheets.Add(sheetNameStr, workbook.Worksheets[1]);
            }

你好,实践过程中发现,如果不通过ExportBytesByTemplate方式导出的excel合并后会导致excel中存在不可读取的内容,而通过ExportBytesByTemplete方式导出合并Sheet就不会。 Excel打开提示错误信息如下:

Excel在“demo.xlsx”中发现不可读取的内容。是否恢复此工作簿的内容?如果信任此工作簿的来源,请单击“是”。

weiwxg avatar Nov 16 '20 07:11 weiwxg

您可以通过指定的条件,去将数据进行拆分到多个文件中,再将其以sheet的形式合并到指定的文件中。

            var data =await exporter.ExportBytesByTemplate<BookInfo>(null,null);
            Stream stream = new MemoryStream(data);
            using (var pck = new ExcelPackage(stream))
            {
                pck.Workbook.Worksheets.Add(sheetNameStr, workbook.Worksheets[1]);
            }

你好,实践过程中发现,如果不通过ExportBytesByTemplate方式导出的excel合并后会导致excel中存在不可读取的内容,而通过ExportBytesByTemplete方式导出合并Sheet就不会。 Excel打开提示错误信息如下:

Excel在“demo.xlsx”中发现不可读取的内容。是否恢复此工作簿的内容?如果信任此工作簿的来源,请单击“是”。

已确认,应该是导出的默认表格样式导致的,当将导出实体属性设置为TableStyle="None"时,异常就没有出现了

weiwxg avatar Nov 16 '20 07:11 weiwxg

这个我们需要抽时间跟进,非常感谢。

xin-lai avatar Nov 16 '20 09:11 xin-lai

@hueifeng 你好,在实际应用中发现,通过您提供的合并Sheet的方式会导致合并结果的Excel列宽相比原始模板会发生变化,请问这种情况应该如何处理呢?

weiwxg avatar Nov 17 '20 07:11 weiwxg