DEV 18.2 导出excel 数据格式异常

DEV 18.2 导出excel 数据格式异常

  • 异常记录:使用DEV框架的项目升级成18.2之后,gridview设置了列DisplayFormat.FormatString = 0.## 的列,导出excel出现数据显示异常的问题:
    在这里插入图片描述
    在这里插入图片描述

  • 处理:导出数据前将列的DisplayFormat.FormatString格式去掉,导完后再恢复数据格式(暂时没有找到别的解决方法,临时处理如下):

/// <summary>
        /// 自定义列导出
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void bbtnCustomizeExport_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            if (!GetExportPermission())
            {
                return;
            }
            if (xtraTabControl1.SelectedTabPage == xtraTabPage1)
            {
                //往来对账表
                if (gdReport.DataSource != null)
                {
                    reportDataSource.AsyncView = gvReport;
                    reportDataSource.Proxy = proxy;
                    IList<AsyncGridControl.ProxyParameter> parameters = new List<AsyncGridControl.ProxyParameter>();
                    reportDataSource.Parameters = parameters;
                    reportDataSource.InitAllData(this);
                    List<ReportCustomerReconciliationDeliveryViewModel> list = gvReport.DataSource as List<ReportCustomerReconciliationDeliveryViewModel>;

                    System.Windows.Forms.SaveFileDialog saveFileDialog = new SaveFileDialog();
                    saveFileDialog.Filter = "导出Excel (*.xlsx)|*.xlsx";
                    saveFileDialog.FilterIndex = 0;
                    saveFileDialog.RestoreDirectory = true;
                    saveFileDialog.FileName = GetReportExportFileName(AppConst.Module_CustomerReconciliation);
                    saveFileDialog.Title = "导出文件";

                    if (saveFileDialog.ShowDialog() == DialogResult.OK)
                    {   
                        ReportCustomerReconciliationDeliveryViewModel prevReceive = new ReportCustomerReconciliationDeliveryViewModel();
                        prevReceive.Abstract = "******:";
                        if (txtPrevReceive.EditValue != null && !string.IsNullOrEmpty(txtPrevReceive.EditValue.ToString()))
                        {
                            prevReceive.Abstract += decimal.Parse(txtPrevReceive.EditValue.ToString()).ToString("0.##");
                        }
                        ReportCustomerReconciliationDeliveryViewModel emptyRow = new ReportCustomerReconciliationDeliveryViewModel();
                        list.Add(emptyRow);
                        list.Add(prevReceive);
                        
                        //处理导出列格式
                        List<GridColumn> cols = new List<GridColumn>();
                        foreach (GridColumn item in gvReport.Columns)
                        {
                            GridColumn col = new GridColumn();
                            col.FieldName = item.FieldName;
                            col.DisplayFormat.FormatString = item.DisplayFormat.FormatString;
                            col.SummaryItem.DisplayFormat = item.SummaryItem.DisplayFormat;
                            cols.Add(col);
                            item.DisplayFormat.FormatString = null;
                            item.SummaryItem.DisplayFormat = null;
                        }
                        DevExpress.XtraPrinting.XlsxExportOptionsEx opEx = new DevExpress.XtraPrinting.XlsxExportOptionsEx();
                        opEx.ExportType = DevExpress.Export.ExportType.WYSIWYG;
                        gvReport.ExportToXlsx(saveFileDialog.FileName, opEx);
                        
                        //恢复列格式
                        foreach (GridColumn item in gvReport.Columns)
                        {
                            item.DisplayFormat.FormatString = cols.FirstOrDefault(r => r.FieldName == item.FieldName) == null ? null : cols.FirstOrDefault(r => r.FieldName == item.FieldName).DisplayFormat.FormatString;
                            item.SummaryItem.DisplayFormat = cols.FirstOrDefault(r => r.FieldName == item.FieldName) == null ? null : cols.FirstOrDefault(r => r.FieldName == item.FieldName).SummaryItem.DisplayFormat;
                        }
                        list.Remove(emptyRow);
                        list.Remove(prevReceive);
                    }
                }
            }
        }
  • 处理导出格式后小数点异常得到解决:在这里插入图片描述
  • 方法提取
#region 自定义导出显示
        private void ExportToXlsx_DisplayFormat(string fileName,DevExpress.XtraPrinting.XlsxExportOptionsEx optionsEx, UserControls.AsyncReportGridControl.AsyncReportGridView gridView)
        {
            //处理导出列格式
            List<GridColumn> cols = new List<GridColumn>();
            foreach (GridColumn item in gridView.Columns)
            {
                GridColumn col = new GridColumn();
                col.FieldName = item.FieldName;
                col.DisplayFormat.FormatString = item.DisplayFormat.FormatString;
                col.SummaryItem.DisplayFormat = item.SummaryItem.DisplayFormat;
                cols.Add(col);
                item.DisplayFormat.FormatString = null;
                item.SummaryItem.DisplayFormat = null;
            }
            gridView.ExportToXlsx(fileName, optionsEx);
            //恢复列格式
            foreach (GridColumn item in gridView.Columns)
            {
                item.DisplayFormat.FormatString = cols.Any(r => r.FieldName == item.FieldName) ? cols.FirstOrDefault(r => r.FieldName == item.FieldName).DisplayFormat.FormatString : null;
                item.SummaryItem.DisplayFormat = cols.Any(r => r.FieldName == item.FieldName) ? cols.FirstOrDefault(r => r.FieldName == item.FieldName).SummaryItem.DisplayFormat : null;
            }
        }

        #endregion
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值