Как установить типы столбцов Excel и форматирование?

Я экспортирую данные из 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 не распознает его.

Любые подсказки?

Я также задаю ширину столбца. Это работает безупречно.

Проблема в том, что назначенные значения являются строками Unicode. Попробуй это:

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

Вы не сказали «как вы делаете вещи вручную», что означает, что люди должны полностью угадать, что вы делаете. Итак, вот моя дикая догадка:

  1. Если я предполагаю, что вы используете компонент Express Spreadsheet из Developer Express, у меня есть большой опыт работы с этим компонентом. Он не поддерживает произвольные числовые форматы. Он поддерживает формат «деньги» (0,00) с ровно двумя знаками после запятой. Он не поддерживает три или один или любое другое число десятичных знаков. Если это так, это известная проблема разработки в электронной таблице Express.

  2. Если вручную вы имеете в виду, что «лист», как вы показываете выше, является OLE-объектом, и вы обмениваетесь с помощью OLE Automation на сам Excel, тогда вы должны форматировать CELLS либо индивидуально, либо как диапазон, а не объекты столбца. Я не уверен, как форматы столбцов будут когда-либо переопределять значения ячеек, если они вообще будут. Форматирование клеток обычно является клеткой по клеточному веществу и должно рассматриваться как таковое.

  3. Если вы действительно хотите, чтобы это работало должным образом, вы не будете использовать Excel через автоматизацию OLE, вы получите подходящую библиотеку для записи в формате Excel XLS. Я был уверен, что вы можете получить правильные результаты непосредственно из сетки DX CX (DevEx), но я бы спросил их на форумах, а не здесь. С обычной TJvDBGridExcelExport DB я просто использовал TJvDBGridExcelExport который входит в Jedi JVCL, и который работает с обычной сетью VCL DB.

Давайте будем гением компьютера.