簡體   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