【问题标题】:How do I set Excel column types and formatting?如何设置 Excel 列类型和格式?
【发布时间】:2012-08-17 15:26:30
【问题描述】:

我正在将数据从 CxDBGrid 导出到 Excel 文件。 我能够创建文件并在其中复制数据,但我在列格式方面遇到了真正的问题。由于我从数据库中提取数据,因此我希望电子表格能够反映以下类型:NUMBER、VARCHAR2、DATE 等等。 我直观地创建了一个宏,去寻找 VBA 代码,并在 Delphi 项目中复制它:

sheet.Columns[K+2].NumberFormat := '0,000'; //Number
sheet.Columns[K+2].NumberFormat := '@'; //Text
sheet.Columns[K+2].NumberFormat := 'm/d/yyyy'; //Date

数字格式在大多数情况下都可以正常工作,但其他两种则不行。 当我打开生成的文件时,文本列显示为“自定义”类型,每个单元格显示“-64”。如果我去编辑一个单元格,正确的值实际上就在那里。 日期是另一个问题:数据库的格式是 dd/mm/yyyy,如果我按原样将它提供给 Excel,它就会一团糟。我尝试设置正确的格式,但 Excel 无法识别它。

有什么线索吗?

我也在设置列宽。这完美无缺。

【问题讨论】:

  • 我假设当您说 cxDbGrid 时,您指的是 Developer Express 组件。如果是这样,您是否使用 Developer Express 提供的 ExportGridToExcel() 过程导出到 Excel?
  • 我试过了,但是设置数据类型有问题。这就是为什么我想手动做事
  • 我在很多地方都使用了 ExportGridToExcel(),没有任何与数据类型或导出格式相关的问题。如果没有看到您的代码,很难弄清楚它为什么不适合您。与其费心编写自己的导出,我会在 Developer Express 支持网站上询问他们是否可以帮助您。他们的支持很棒,通常他们可以很快为您提供解决方案。

标签: delphi excel delphi-xe2 quantumgrid


【解决方案1】:

问题在于分配的值是 Unicode 字符串。试试这个:

sheet.Columns[K+2].NumberFormat := AnsiChar('@');
sheet.Columns[K+2].NumberFormat := AnsiString('m/d/yyyy');

【讨论】:

  • 天啊,这对我很有帮助!太棒了!
  • 我有点困惑,因为数字似乎设置为Number,但@ 将格式设置为文本。太棒了
【解决方案2】:

您没有说过“您是如何手动操作的”,这意味着人们必须完全猜测您在做什么。所以这是我的疯狂猜测:

  1. 如果我假设您使用的是 Developer Express 中的 Express 电子表格组件 我对这个组件有丰富的经验。它不支持任意数字格式。它支持精确到小数点后两位的“货币”格式 (0.00)。它不支持三位或一位,或任何其他小数位数。 如果是这样,这是 Express 电子表格中的一个已知设计问题。

  2. 如果手动表示上面显示的“工作表”是一个 OLE 对象,并且您通过 OLE 自动化与 Excel 本身进行通信,那么您应该单独或作为一个范围来格式化 CELLS,而不是列对象。我不确定列对象格式将如何覆盖单元格值,如果他们这样做的话。单元格的格式通常是一个单元一个单元的问题,必须这样处理。

  3. 如果您真的希望它正常工作,您将不会通过 OLE 自动化使用 Excel,您将获得一个正确的 Excel XLS 格式的书写库。我很确定您可以直接从 CX(DevEx)数据库网格中获得正确的结果,但我会在他们的论坛上询问,而不是在这里。对于常规的数据库网格,我只需使用 Jedi JVCL 中的 TJvDBGridExcelExport,它可以与常规的 VCL 数据库网格一起使用。

【讨论】:

    猜你喜欢
    • 2015-01-28
    • 2014-04-28
    • 2019-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-02
    相关资源
    最近更新 更多