wu8829 发表于 2019-6-16 08:49:15

关于HtmlView的呈现与导出

请问在webform中,HtmlView能否设置“连续页显示”?

麻烦提供一个关于HtmlView导出为excel的Demo,官网教程的导出方式存在瑕疵,例如:导出的excel生成多个sheet。博客中的教程(https://www.grapecity.com.cn/blogs/excel-export-page-or-page-merger-appeared-disorder)是在winform下。

KearneyKang 发表于 2019-6-17 11:19:44

您好,导出Excel的代码如下:// Provide the page report you want to render.
GrapeCity.ActiveReports.PageReport report = new GrapeCity.ActiveReports.PageReport();GrapeCity.ActiveReports.Document.PageDocument reportDocument = new GrapeCity.ActiveReports.Document.PageDocument(report);

// Create an output directory.
System.IO.DirectoryInfo outputDirectory = new System.IO.DirectoryInfo(@"C:\MyExcel");
outputDirectory.Create();

// Provide settings for your rendering output.
GrapeCity.ActiveReports.Export.Excel.Page.ExcelRenderingExtensionSettings excelSetting = new GrapeCity.ActiveReports.Export.Excel.Page.ExcelRenderingExtensionSettings();
excelSetting.FileFormat = GrapeCity.ActiveReports.Export.Excel.Page.FileFormat.Xls;
GrapeCity.ActiveReports.Extensibility.Rendering.ISettings setting = excelSetting;

// Set the rendering extension and render the report.
GrapeCity.ActiveReports.Export.Excel.Page.ExcelRenderingExtension excelRenderingExtension = new GrapeCity.ActiveReports.Export.Excel.Page.ExcelRenderingExtension();
GrapeCity.ActiveReports.Rendering.IO.FileStreamProvider outputProvider = new GrapeCity.ActiveReports.Rendering.IO.FileStreamProvider(outputDirectory, System.IO.Path.GetFileNameWithoutExtension(outputDirectory.Name));

// Overwrite output file if it already exists.
outputProvider.OverwriteOutputFile = true;

reportDocument.Render(excelRenderingExtension, outputProvider, excelSetting.GetSettings());
然后设置导出时sheet的属性是通过控制这个属性控制的:Multisheet的属性默认是true,你在后台代码层修改为 false就行。


wu8829 发表于 2019-6-17 11:39:58

1、第一个问题,您未解答。
2、第二个问题,您的方案是利用一个具有runat=server属性的按钮,来导出,如果我是html按钮呢?例如:

<input id='btnPrint' type='Button' value='导出' onclick='OnExport()'/>

      function OnExport() {
            var viewModel = GetViewModel('WV_Balance');
            viewModel.Export(ExportType.Xls, function (uri) {
                window.location = uri;
            }, true);


其次,您的方案中,使用了:

System.IO.DirectoryInfo outputDirectory = new System.IO.DirectoryInfo(@"C:\MyExcel");
outputDirectory.Create();

如果我并不具有路径权限呢?而且您这个方法,要在服务器上产生多少垃圾文件呀,导出一次,产生一个excel。(尽管,我们可以通过后续代码删除,但此方法并不完美)

KearneyKang 发表于 2019-6-17 16:16:42

第一个问题这样设置:

然后第二个关于导出的问题,可以进行一个拦截,然后你进行对应的一个操作:
GrapeCity.ActiveReports.PageReport rpt = new GrapeCity.ActiveReports.PageReport(new System.IO.FileInfo(Server.MapPath(@"Reports\页面报表.rdlx")));
                GrapeCity.ActiveReports.Document.PageDocument reportDocument = new GrapeCity.ActiveReports.Document.PageDocument(rpt);

                // Provide settings for your rendering output.
                GrapeCity.ActiveReports.Export.Excel.Page.ExcelRenderingExtensionSettings excelSetting = new GrapeCity.ActiveReports.Export.Excel.Page.ExcelRenderingExtensionSettings();
                excelSetting.FileFormat = GrapeCity.ActiveReports.Export.Excel.Page.FileFormat.Xlsx;
                GrapeCity.ActiveReports.Extensibility.Rendering.ISettings setting = excelSetting;

                // Set the rendering extension and render the report.
                GrapeCity.ActiveReports.Export.Excel.Page.ExcelRenderingExtension excelRenderingExtension = new GrapeCity.ActiveReports.Export.Excel.Page.ExcelRenderingExtension();
                GrapeCity.ActiveReports.Rendering.IO.MemoryStreamProvider outputProvider = new GrapeCity.ActiveReports.Rendering.IO.MemoryStreamProvider();
                reportDocument.Render(excelRenderingExtension, outputProvider, setting.GetSettings());

                Response.ContentType = "application/vnd.ms-excel";
                Response.AddHeader("content-disposition", "inline;filename=MyExport.xls");
                System.IO.MemoryStream ms = new System.IO.MemoryStream();
                outputProvider.GetPrimaryStream().OpenStream().CopyTo(ms);
                Response.BinaryWrite(ms.ToArray());
                Response.End();


wu8829 发表于 2019-6-17 17:09:58

第一个问题已经完美解决,谢谢,又衍生出另外一个问题:报表标题行如何冻结,在呈现的时候!

wu8829 发表于 2019-6-17 17:25:24

本帖最后由 wu8829 于 2019-6-17 17:45 编辑

第二个问题:

按照提供的方法导出后发现exccel中,出现空行(空行的位置是未设置MultiSheet = false之前分页的位置)


KearneyKang 发表于 2019-6-18 09:00:46

你好,冻结行列只能在H5的方式渲染的时候才可以。你现在用的HtmlViewer实现不了这个需求。
第二个问题,你说的空行的问题,是在分页前还是在分页后。

wu8829 发表于 2019-6-18 09:10:01

KearneyKang 发表于 2019-6-18 09:00
你好,冻结行列只能在H5的方式渲染的时候才可以。你现在用的HtmlViewer实现不了这个需求。
第二个问题,你 ...

分页前,也就是说,5 进水阀 是第一页的最后一条记录

wu8829 发表于 2019-6-18 11:49:25

该问题已自行解决,谢谢,请闭贴

KearneyKang 发表于 2019-6-18 13:42:29

好的:)
页: [1]
查看完整版本: 关于HtmlView的呈现与导出