如何设置Excel列types和格式?

我正在将数据从CxDBGrid导出到Excel文件。 我能够创build文件并在其中复制数据,但是我在列格式上遇到了麻烦。 由于我从数据库中提取数据,所以我希望电子表格能够反映types:NUMBER,VARCHAR2,DATE等等。 我直观地创build了一个macros,去寻找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 

数字格式化在大多数情况下都能正常工作,但其他两种则不能。 当我打开生成的文件时,文本列显示为types“自定义”,每个单元显示“-64”。 如果我去编辑单元格,正确的值实际上是在那里。 date是另一个问题:数据库的格式是dd / mm / yyyy,如果我按照原样将它提供给Excel,它会变得混乱。 我试图设置正确的格式,但然后Excel不能识别它。

任何线索?

我也设置列宽。 这工作完美无瑕。

问题是分配的值是Unicodestring。 尝试这个:

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

你没有说“你是怎么做手动的”,这意味着人们必须完全猜测你在做什么。 所以这是我的猜测:

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

  2. 如果通过手动方式,您的意思是上面显示的“sheet”是一个OLE对象,并且您正在通过OLE自动化与Excel进行通信,那么您应该单独或作为范围来格式化CELLS,而不是列对象。 我不确定列对象格式如何覆盖单元格值,如果它们完成的话。 细胞的格式通常是一个细胞的细胞,必须像这样处理。

  3. 如果你真的想要这个工作正常,你将不会使用Excel通过OLE自动化,你会得到一个适当的Excel XLS格式的写作库。 我确信你可以直接从CX(DevEx)数据库网格获得正确的结果,但我会问在他们的论坛,而不是在这里。 使用常规的数据库网格,我只需使用Jedi JVCL中的TJvDBGridExcelExport ,并使用常规的VCL数据库网格。