用于Excel的XtraReports格式单元格以编程方式导入

时间:2015-09-22 12:59:17

标签: excel import formatting xtrareport

使用Designer时,我可以将单元格的XlsxFormatString属性编辑为"#,## 0.00"结果如预期。当我尝试以编程方式执行此操作时,没有任何更改:

private XRTableCell CreateCell(int width, string text, bool haveColor, string color, bool isBold, DevExpress.XtraPrinting.BorderSide border, bool IsNumeric)
        {
            //MyWorkaround
            if (IsNumeric)
            {
                if (text.Contains(","))
                {
                    if (text.Length > text.IndexOf(',') + 3)
                        text = text.Remove(text.IndexOf(',') + 3);
                }
            }
            //MyWorkaround end 
            XRTableCell cell = CreateCell(width, text, haveColor, color, isBold);
            cell.Borders = border;
            if (IsNumeric)
                cell.XlsxFormatString = "#,##0.00";
            return cell;
        }

有任何建议使它成为正确的吗?

1 个答案:

答案 0 :(得分:2)

在对Devexpress Documents进行一些研究之后,经过几十次尝试,我得出了这个解决方案;

  1. 如果输出不会用于某些计算:

    XtraReport myReport = new XtraReport();
    myReport.ExportOptions.Xls.TextExportMode = TextExportMode.Text;
    myReport.ExportOptions.Xlsx.TextExportMode = TextExportMode.Text;
    
  2. 如果输出单元格类型由于某种原因而重要:

    float myTextValue;
    if (float.TryParse(textToPrint,out  myValue))
            {
                string decSeperator = CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator;
                if (text.Contains(decSeperator))
                {
                    if (textToPrint.Length > textToPrint.IndexOf(decSeperator[0]) + 3)
                        textToPrint= textToPrint.Remove(textToPrint.IndexOf(decSeperator[0]) + 3);
                }
            }
    
  3. 如果可以在文本中找到分隔符,则会在2位数后修剪。如果最后一位数字高于5等,它可以像圆形一样改变。

    XtraReports导出工具已经知道文本是否为数字,并且它将自己设置单元格类型

    如果有人找到更好的解决方案,请随时与我们沟通。