Форум программистов, компьютерный форум, киберфорум
Наши страницы

Delphi для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
sanya0107
121 / 121 / 4
Регистрация: 14.02.2010
Сообщений: 289
#1

Функция: сохранить данные из StringGrid в Excel - Delphi

24.04.2010, 13:39. Просмотров 1203. Ответов 2
Метки нет (Все метки)

У меня есть функция которая сохраняет из StringGrid в Excel.
Но оно сохраняет без запятых то есть если число 6,22 то оно его сохраняет как 6 22 подскажите где что-то не так!
Вот сама функция
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
function SaveAsExcel(stringgrid: tstringgrid; filename: string): boolean;
 const
 xlwbatworksheet = -4167;
var
  row, col: integer;
  xlapp, sheet: olevariant;
begin
  result := false;
  xlapp := createoleobject('excel.application');
  try
  xlapp.visible := false;
  xlapp.workbooks.add(xlwbatworksheet);
  sheet := xlapp.workbooks[1].worksheets[1];
  sheet.name := 'Лист_1';
  for col := 1 to stringgrid.colcount  do
   for row := 1 to stringgrid.rowcount do
   sheet.cells[row , col ] := stringgrid.cells[col, row];
  try
  xlapp.workbooks[1].saveas(FileName);
  result := true;
  except
// error ?
  end;
  finally
  if not varisempty(xlapp) then
   begin
    xlapp.displayalerts := false;
    xlapp.quit;
    xlapp := unassigned;
    sheet := unassigned;
   end;
 end;
end;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.04.2010, 13:39
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Функция: сохранить данные из StringGrid в Excel (Delphi):

Сохранить данные stringgrid в массив - Delphi
Дана такая задача: есть stringgrid размером 2 на 10. Необходимо найти количество заполненных пользователем строк и запомнить данные в...

Сохранить в Word данные: из таблицы StringGrid, из Memo и скриншот Chart - Delphi
Подскажите, пожалуйста, как сохранить информацию в Word. А именно, данные: из таблицы StringGrid, из Memo и скриншот Chart.

Хочу сохранить данные из stringgrid в файл, помогите найти ошибку - Delphi
Открытие procedure TForm1.N3Click(Sender: TObject); var zap:stud; begin if opendialog1.execute then begin ...

Хранить данные StringGrid в Excel - Delphi
Народ, здравствуйте. Помогите пожалуйста написать код к моей программе. На одной из форм я должен иметь возможность ввести название...

Не запускается Excel, и соответственное не копирует данные в StringGrid - Delphi
Помогите пожалуйста, при компиляции Delphi ошибок не выдает, но при нажатии на кнопку, Excel не запускается(в процессах его нет), ну и...

Сохранить данные StringGrid при закрытии и восстановить их при запуске программы - Delphi
Здравствуйте, уважаемые программисты! Пытаюсь сделать так, чтобы введенные данные в StringGrid сохранялись при выходе из программы и...

2
NobodyElseButMe
6 / 6 / 0
Регистрация: 07.02.2010
Сообщений: 33
24.04.2010, 13:41 #2
ИМХО, формат ячеек надо изменить
1
sanya0107
121 / 121 / 4
Регистрация: 14.02.2010
Сообщений: 289
24.04.2010, 15:34  [ТС] #3
А можно поточней где и что поменять??

Добавлено через 1 час 44 минуты
Все спасибо тем кто откликнулся. Я нашел другую функцию с ее помощью я избавился от данной ошибки!!
Вот эти функции!
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
function RefToCell(ARow, ACol: Integer): string;
 begin
  Result := Chr(Ord('A') + ACol - 1) + IntToStr(ARow);
 end;
function SaveAsExcelFile(AGrid: TStringGrid; ASheetName, AFileName: string): Boolean;
 const
  xlWBATWorksheet = -4167;
 var
  Row, Col: Integer;
  GridPrevFile: string;
  XLApp, Sheet, Data: OLEVariant;
  i, j: Integer;
 begin
  // Prepare Data
 Data := VarArrayCreate([1, AGrid.RowCount, 1, AGrid.ColCount], varVariant);
  for i := 1 to AGrid.ColCount  do
  for j := 1 to AGrid.RowCount  do
  Data[j , i ] := AGrid.Cells[i, j];
  // Create Excel-OLE Object
 Result := False;
  XLApp := CreateOleObject('Excel.Application');
  try
  // Hide Excel
  XLApp.Visible := False;
  // Add new Workbook
  XLApp.Workbooks.Add(xlWBatWorkSheet);
  Sheet := XLApp.Workbooks[1].WorkSheets[1];
  Sheet.Name := ASheetName;
  // Fill up the sheet
  Sheet.Range[RefToCell(1, 1), RefToCell(AGrid.RowCount,
  AGrid.ColCount)].Value := Data;
  // Save Excel Worksheet
  try
  XLApp.Workbooks[1].SaveAs(AFileName);
  Result := True;
  except
  // Error ?
  end;
  finally
  // Quit Excel
  if not VarIsEmpty(XLApp) then
  begin
  XLApp.DisplayAlerts := False;
  XLApp.Quit;
  XLAPP := Unassigned;
  Sheet := Unassigned;
  end;
  end;
 end;
 // Example:
procedure TForm1.ButtonSaveClick(Sender: TObject);
 begin
  if SaveAsExcelFile(mainStrGrid, 'Лист_1', 'c:\MyExcelFile.xls') then
  ShowMessage('StringGrid saved!');
 end;
Тут сохранение происходит правильно!
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.04.2010, 15:34
Привет! Вот еще темы с ответами:

Некоторые ячейки StringGrid закрашены и содержат в себе числовые данные, но эти данные не видно! - Delphi
В общем, есть StringGrid, который практически соответствует картинке (прикреплена). По отдельности отображаются цифры на своих местах, но ...

Сохранить изменения StringGrid - Delphi
Здравствуйте. Задача следующая: надо сделать так чтобы появлялось окно предлагающее сохранить изменения в stringgrid. Как осуществить...

Сохранить изменения в stringgrid - Delphi
Доброго времени суток. В проге есть кнопка которая добавляет строку в таблицу как сделать чтоб при следующем запуске строка не пропадала?

сохранить/загрузить в 2 stringgrid - Delphi
Доброго времени суток форумчане :) Как сделать такой файл чтобы можно было сохранить в один файл из 2 гридов а потом можно было загрузить...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru