繁体   English   中英

试图将 telerik winform 分组网格数据导出到 excel?

[英]Trying to export telerik winform grouped grid data to excel?

当我在没有分组的情况下导出网格数据时,它会完美导出,但是当我导出带有分组的网格数据时,它会跳过行,如果我删除 header 行,那么无论是否分组都可以完美导出数据? 我认为问题出在 header 行中,当我删除 header 行时,它可以正常工作。 请告诉我如何调整 header 行以便可以完美导出分组数据

 private void btnExport_Click(object sender, EventArgs e)
        {
            saveFileDialog1.FileName = this.ReportHeaderText.Replace(' ', '-').Replace('/', '-');
            saveFileDialog1.OverwritePrompt = true;

            if (saveFileDialog1.ShowDialog() != DialogResult.OK)
            {
                return;
            }

            if (saveFileDialog1.CheckFileExists)
            {

            }


           if (saveFileDialog1.FileName.Equals(String.Empty))
            {
                RiceMsgBox.ShowErrorBox("Please enter a file name.");
                return;
            }



            string fileName = this.saveFileDialog1.FileName;
            bool openExportFile = false;

            RunExportToExcelML(fileName, ref openExportFile);
            if (openExportFile)
            {
                try
                {
                    System.Diagnostics.Process.Start(fileName);
                }
                catch (Exception ex)
                {
                    RiceMsgBox.ShowErrorBox("The file cannot be opened on your system");
                }
            }
            this.tabControl1.SelectedIndex = 1;
        }


  private void RunExportToExcelML(string fileName, ref bool openExportFile)
        {
            Telerik.WinControls.Export.GridViewSpreadExport exporter = new Telerik.WinControls.Export.GridViewSpreadExport(gridReport, 0);

            exporter.HiddenColumnOption = Telerik.WinControls.UI.Export.HiddenOption.DoNotExport;
            exporter.CellFormatting += exporter_CellFormatting;
            exporter.ExportVisualSettings = true;
            exporter.SheetMaxRows = ExcelMaxRows._1048576;
            exporter.SheetName = System.Text.RegularExpressions.Regex.Replace(this.ReportHeaderText.Length > 30 ? this.ReportHeaderText.Substring(0,30) : this.ReportHeaderText, @"[^0-9a-zA-Z]+", ","); 

            exporter.SummariesExportOption = SummariesOption.ExportAll;
            Telerik.WinControls.Export.SpreadExportRenderer exportRenderer = new Telerik.WinControls.Export.SpreadExportRenderer();
            exportRenderer.WorkbookCreated += renderer_WorkbookCreated;
            // exportRenderer.ExcelTableCreated += exporter_ExcelTableCreated;
            //exporter.CellFormatting += exporter_ExcelCellFormatting;

            //FormatGridColumns(gridReport);
            try
            {
                exporter.RunExport(fileName, exportRenderer);
                var dialog = RiceMsgBox.GetQuestionBox("The data in the grid was exported successfully. Do you want to open the file?");
                if (dialog == DialogResult.Yes)
                {
                    openExportFile = true;                    
                }
                else
                {
                    openExportFile = false;
                }
            }
            catch(Exception ex)
            {
                RiceMsgBox.ShowErrorBox("Error exporting data.");
            }
        }

        void exporter_CellFormatting(object sender, Telerik.WinControls.Export.CellFormattingEventArgs e)
        {
            CellBorders borders = new CellBorders();
            borders.Top = new CellBorder(CellBorderStyle.Thin, new ThemableColor(System.Windows.Media.Colors.Black));
            borders.Bottom = new CellBorder(CellBorderStyle.Thin, new ThemableColor(System.Windows.Media.Colors.Black));
            borders.Right = new CellBorder(CellBorderStyle.Thin, new ThemableColor(System.Windows.Media.Colors.Black));
            borders.Left = new CellBorder(CellBorderStyle.Thin, new ThemableColor(System.Windows.Media.Colors.Black));
            e.CellStyleInfo.Borders = borders;
        }

        void renderer_WorkbookCreated(object sender, Telerik.WinControls.Export.WorkbookCreatedEventArgs e)
        {
            PatternFill solidPatternFill = new PatternFill(PatternType.Solid, System.Windows.Media.Colors.Transparent, System.Windows.Media.Colors.Transparent);
            CellValueFormat textFormat = new CellValueFormat("@");
            string dateRange = "( From Date : " + dtpFromDate.Text + " - To Date : " + dtpToDate.Text + " )";

            Worksheet worksheet = e.Workbook.Sheets[0] as Worksheet;

            worksheet.Columns[worksheet.UsedCellRange].AutoFitWidth();
            CellRange range = new CellRange(0, 0, 1, gridReport.Columns.Count);
            CellSelection header = worksheet.Cells[range];
            if (header.CanInsertOrRemove(range, ShiftType.Down))
            {
                header.Insert(InsertShiftType.Down);
            }
            header.Merge();
            header.SetFormat(textFormat);
            header.SetHorizontalAlignment(Telerik.Windows.Documents.Spreadsheet.Model.RadHorizontalAlignment.Center);
            header.SetVerticalAlignment(Telerik.Windows.Documents.Spreadsheet.Model.RadVerticalAlignment.Center);
            header.SetFontFamily(new ThemableFontFamily("Rockwell"));
            header.SetFontSize(24);
            header.SetFill(solidPatternFill);
            header.SetValue(this.ReportHeaderText);



        }

GridViewSpreadExport 生成一个包含合并单元格的文档。 在顶部插入一行然后导出文档会导致错误的合并单元格。 这是一个已知问题: 链接

作为一种解决方法,您可以导出文档,然后重新打开它并在导出的网格数据上方插入一行,而不是使用 WorkbookCreated 事件插入新行。

    private void RunExportToExcelML(string fileName, ref bool openExportFile)
    {
        Telerik.WinControls.Export.GridViewSpreadExport exporter = new Telerik.WinControls.Export.GridViewSpreadExport(gridReport, 0);

        exporter.HiddenColumnOption = Telerik.WinControls.UI.Export.HiddenOption.DoNotExport;
        exporter.CellFormatting += exporter_CellFormatting;
        exporter.ExportVisualSettings = true;
        exporter.SheetMaxRows = ExcelMaxRows._1048576;
        exporter.SheetName = System.Text.RegularExpressions.Regex.Replace(this.ReportHeaderText.Length > 30 ? this.ReportHeaderText.Substring(0, 30) : this.ReportHeaderText, @"[^0-9a-zA-Z]+", ",");

        exporter.SummariesExportOption = SummariesOption.ExportAll;
        Telerik.WinControls.Export.SpreadExportRenderer exportRenderer = new Telerik.WinControls.Export.SpreadExportRenderer();
        //exportRenderer.WorkbookCreated += renderer_WorkbookCreated;
        try
        {
            exporter.RunExport(fileName, exportRenderer);
            this.InsertHeader(fileName);
            // more code...
    }



    private void InsertHeader(string fileName)
    {
        XlsxFormatProvider formatProvider = new XlsxFormatProvider();
        Workbook workbook = null;
        using (Stream stream = new FileStream(fileName, FileMode.Open))
        {
            workbook = formatProvider.Import(stream);
        }

        PatternFill solidPatternFill = new PatternFill(PatternType.Solid, System.Windows.Media.Colors.Transparent, System.Windows.Media.Colors.Transparent);
        CellValueFormat textFormat = new CellValueFormat("@");
        //string dateRange = "( From Date : " + dtpFromDate.Text + " - To Date : " + dtpToDate.Text + " )";

        Worksheet worksheet = workbook.Sheets[0] as Worksheet;

        worksheet.Columns[worksheet.UsedCellRange].AutoFitWidth();
        CellRange range = new CellRange(0, 0, 1, gridReport.Columns.Count);
        CellSelection header = worksheet.Cells[range];
        if (header.CanInsertOrRemove(range, ShiftType.Down))
        {
            header.Insert(InsertShiftType.Down);
        }
        header.Merge();
        header.SetFormat(textFormat);
        header.SetHorizontalAlignment(Telerik.Windows.Documents.Spreadsheet.Model.RadHorizontalAlignment.Center);
        header.SetVerticalAlignment(Telerik.Windows.Documents.Spreadsheet.Model.RadVerticalAlignment.Center);
        header.SetFontFamily(new ThemableFontFamily("Rockwell"));
        header.SetFontSize(24);
        header.SetFill(solidPatternFill);
        header.SetValue(this.ReportHeaderText);

        using (Stream output = new FileStream(fileName, FileMode.Create))
        {
            formatProvider.Export(workbook, output);
        }
    }

有关 SpreadProcessing 的更多信息,请访问以下链接: https://docs.telerik.com/devtools/document-processing/libraries/radspreadprocessing/overview

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM