Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.11.2013, 22:57   #1
Євгеній Бєлік
Пользователь
 
Аватар для Євгеній Бєлік
 
Регистрация: 29.10.2011
Сообщений: 52
По умолчанию изменить формат ячейки при сохранении xls

Возникла потребность в изменении формата ячейки в числовой формат.
У меня есть стринггрид в котором у меня есть большая таблица, далее я записываю эту табл в новый документ xls.
Вот так сохраняю стринггрид в xls:
Код:
procedure TForm1.Button3Click(Sender: TObject);
var
 ExcelApp, Sheet, Range: variant;
 Col, Row: Word;
 FData: Variant;
 i, j:integer;
 d : TDateTime;
begin
  d:=Now;
  Label6.Caption:='активен';
  Label6.Font.Color:=clgreen;
  Application.ProcessMessages();
  ExcelApp := CreateOleObject('Excel.Application');

  //создаем вариантный массив
  FData:=VarArrayCreate([1,StringGrid1.RowCount,1,StringGrid1.ColCount],varVariant);

  try
    ExcelApp.Visible := false;

    ExcelApp.Workbooks.Add;

    for i:=1 to VarArrayHighBound(FData,1) do
        for j:=1 to VarArrayHighBound(FData,2) do
          FData[i,j]:=StringGrid1.Cells[J-1,I-1];

    Sheet := ExcelApp.ActiveWorkbook.Worksheets[1];

Range:=Sheet.Range[Sheet.Cells[1,1],Sheet.Cells[VarArrayHighBound(FData,1),VarArrayHighBound(FData,2)]];
//вставляем данные
Range.Value:=FData;

    ExcelApp.ActiveWorkbook.SaveAs(GetExcelFileName);

    ShowMessage('Ok!');
  finally
    ExcelApp.Application.Quit;
    ExcelApp := unassigned;
    Sheet:= unassigned;
  end;
Label10.Caption:=FormatDateTime('hh:mm:ss:zzz',Now()-d);
Label6.Caption:='неактивен';
Label6.Font.Color:=clred;
end;
как тут можно дополнить, так что бы данные в новом xls были как числа и не как текст?
Євгеній Бєлік вне форума Ответить с цитированием
Старый 25.11.2013, 09:01   #2
igh0st
Форумчанин
 
Аватар для igh0st
 
Регистрация: 05.07.2010
Сообщений: 136
По умолчанию

Попробуй с NumberFormat и Value2
Код:
//вставляем данные
Range.NumberFormat := '';
Range.Value2 := FData;
igh0st вне форума Ответить с цитированием
Старый 25.11.2013, 17:05   #3
Євгеній Бєлік
Пользователь
 
Аватар для Євгеній Бєлік
 
Регистрация: 29.10.2011
Сообщений: 52
По умолчанию

спасибо, но выдает ошибку Invalid variant operation на той строке куда вставил .NumberFormat
Возможно как -то использовать AsFloat, но я еще с ним не работал...
или программно создать макрос и применить его при записи

Последний раз редактировалось Євгеній Бєлік; 25.11.2013 в 17:17.
Євгеній Бєлік вне форума Ответить с цитированием
Старый 25.11.2013, 18:34   #4
-=Virus=-
Форумчанин
 
Аватар для -=Virus=-
 
Регистрация: 03.07.2009
Сообщений: 246
По умолчанию

Цитата:
Сообщение от Євгеній Бєлік Посмотреть сообщение
спасибо, но выдает ошибку Invalid variant operation на той строке куда вставил .NumberFormat
Возможно как -то использовать AsFloat, но я еще с ним не работал...
или программно создать макрос и применить его при записи
Вначале переведи текст в цифры StrToInt. Возможно из-за этого

Код:
//вставляем данные
Range.NumberFormat := StrToInt(S);
Range.Value2 := FData;
-=Virus=- вне форума Ответить с цитированием
Старый 25.11.2013, 19:12   #5
Євгеній Бєлік
Пользователь
 
Аватар для Євгеній Бєлік
 
Регистрация: 29.10.2011
Сообщений: 52
По умолчанию

Тоже пробовал но мне ответило что не может конвертнуть тип variant...
Євгеній Бєлік вне форума Ответить с цитированием
Старый 25.11.2013, 21:05   #6
-=Virus=-
Форумчанин
 
Аватар для -=Virus=-
 
Регистрация: 03.07.2009
Сообщений: 246
По умолчанию

Код покажи
-=Virus=- вне форума Ответить с цитированием
Старый 25.11.2013, 21:31   #7
Євгеній Бєлік
Пользователь
 
Аватар для Євгеній Бєлік
 
Регистрация: 29.10.2011
Сообщений: 52
По умолчанию

Вот я тебе переделал в тестовый вид, сначала открываешь табл (там только числа (флоат)) которая в папке, они импортируется в стринггрид, далее нажиаеш модифай (это для того что бы просто изменить данные), после этого нажимаешь сохранить и новая табл экспортируется в новый файл который появится в папке с прогой, вот только там уже новые значения в виде текста, вот как их можно изменить сразу в числовой тип при нажатии на сохранить, буду очень благодарен!
Вложения
Тип файла: rar ForTest.rar (385.6 Кб, 14 просмотров)
Євгеній Бєлік вне форума Ответить с цитированием
Старый 26.11.2013, 08:14   #8
Toxa
Форумчанин Подтвердите свой е-майл
 
Аватар для Toxa
 
Регистрация: 01.12.2006
Сообщений: 514
По умолчанию

Цитата:
Сообщение от -=Virus=- Посмотреть сообщение
Вначале переведи текст в цифры StrToInt. Возможно из-за этого

Код:
//вставляем данные
Range.NumberFormat := StrToInt(S);
Range.Value2 := FData;
по моему NumberFormat чуть по глубже находится, могу ошибаться
а вообще вот как найти параметр ворда и экселя
Пишу на Delphi за еду
Toxa вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка при сохранении файла xls Chaon Microsoft Office Excel 1 16.03.2012 13:45
Автомейл данных из ячейки при сохранении файла Python Microsoft Office Excel 3 06.10.2010 01:18
При перетаскивании не изменять формат ячейки. agregator Microsoft Office Excel 4 17.11.2009 19:17
изменить формат ячейки natali Microsoft Office Excel 2 08.10.2007 12:40
как присвоить значение ячейки R1C1 из 1.xls, допустим какой-нибудь любой ячейке из 2.xls ? diabloskrk Microsoft Office Excel 3 08.10.2007 12:27