Форум программистов, компьютерный форум, киберфорум
Delphi
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
11 / 11 / 8
Регистрация: 26.03.2014
Сообщений: 400

Delphi + Excel странное открытие xls

20.10.2014, 16:54. Показов 1947. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
При открытии файла "k5.xlsx" и записи в него некоторых данных, на самом деле происходит открытие k51.xlsx из за этого при попытке сохранить сохранение не удается.
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
var  MyExcel: OleVariant;
const xlapp = 'Excel.Application';
 
procedure TForm1.Button2Click(Sender: TObject);
var ind,col,row:integer;
kl:string;
begin
  ind:=ComboBox1.ItemIndex+1;
  kl:=Copy(ComboBox1.Items[ComboBox1.ItemIndex],0,2);
  Label2.Caption:=inttostr(ind);
  Label3.Caption:=kl;
 
  MyExcel:=CreateOleObject(xlapp);
  MyExcel.WorkBooks.Add(ExtractfilePath(Application.ExeName)+'k5.xlsx');
  MyExcel.Visible:=true;
  MyExcel.DisplayAlerts:=False;
 
  MyExcel.ActiveWorkBook.Sheets.Item[ind].Activate;
  MyExcel.ActiveWorkBook.Sheets.Item[ind].name:=kl;
 
  for col := 0 to sg.colcount - 1 do
   for row := 0 to sg.rowcount - 1 do
   MyExcel.ActiveWorkBook.Sheets.Item[ind].cells[row + 1, col + 1] := sg.cells[col, row];
 
   if SaveWorkBook('k5.xlsx', ind)=false then
   ShowMessage('не удачно')
   else
   StopExcel;
end;
 
function TForm1.SaveWorkBook(FileName:TFileName; WBIndex:integer):boolean;
begin
  try
    MyExcel.WorkBooks.Save(FileName);
    if MyExcel.WorkBooks.Saved then
      Result:=true
    else
      Result:=false;
  except
    Result:=false;
  end;
end;

Окно остается открытым, и в принципе я руками могу все это сохранить, но вопрос стоит в автоматизации этого процесса. Что делать, как быть?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
20.10.2014, 16:54
Ответы с готовыми решениями:

Excel.xls(2003) сохранить как excel.xlsx (2010)
как реализовать: есть файлы Excel2003 *xls надо сохранить их в *xlsx Excel2010 fileExcel.SaveAs() просто перезаписывает его с новым...

Открытие xls в DGV
Здравствуйте Открываю *.xls файл в datagridview private void button1_Click_1(object sender, EventArgs e) { ...

Открытие файла .xls!
Я особо не работаю с Exel, но меня интересует один вопрос. Например я хочу открыть экселевский файлик, кликаю два раза мышкой на нем, и...

4
 Аватар для FaTaL-CS
73 / 74 / 23
Регистрация: 14.10.2013
Сообщений: 549
20.10.2014, 19:57
Цитата Сообщение от vino0s Посмотреть сообщение
на самом деле происходит открытие k51.xls
Почему?
Попробуйте сохранять так
MyExcel.WorkBooks.SaveAs(...);
0
11 / 11 / 8
Регистрация: 26.03.2014
Сообщений: 400
20.10.2014, 20:35  [ТС]
В том и соль что не понятно почему он открывает его с индексом 1, SaveAs это была первая попытка сохранить, она вела себя так же.. Только SaveAs используется для листа, а не для книги. sheets
0
61 / 51 / 25
Регистрация: 17.12.2013
Сообщений: 247
21.10.2014, 06:13
Лучший ответ Сообщение было отмечено vino0s как решение

Решение

vino0s, ты не открываешь книгу, а создаешь. Замени:
Delphi
1
MyExcel.WorkBooks.Add(ExtractfilePath(Application.ExeName)+'k5.xlsx');
на:
Delphi
1
MyExcel.WorkBooks.Open(ExtractfilePath(Application.ExeName)+'k5.xlsx');
1
 Аватар для Mawrat
13114 / 5895 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
21.10.2014, 09:36
Добавлю. Использование ActiveBook, ActiveSheet провоцирует на ошибки, когда идёт работа с несколькими книгами или с несколькими листами, соответственно. Надёжнее использовать отдельные переменные для книги и листа.
Например:
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
var MyExcel, MyBook, MySh : OleVariant;
const xlapp = 'Excel.Application';
 
procedure TForm1.Button2Click(Sender: TObject);
var
  ind,col,row:integer;
  kl:string;
begin
  ind:=ComboBox1.ItemIndex+1;
  kl:=Copy(ComboBox1.Items[ComboBox1.ItemIndex],0,2);
  Label2.Caption:=inttostr(ind);
  Label3.Caption:=kl;
 
  MyExcel:=CreateOleObject(xlapp);
  MyExcel.Visible:=true;
 
  MyBook := MyExcel.WorkBooks.Open(ExtractFilePath(Application.ExeName)+'k5.xlsx');
  MySh := MyBook.Sheets[ind];
  MySh.Name := kl;
  for col := 0 to sg.colcount - 1 do
    for row := 0 to sg.rowcount - 1 do
      MySh.Cells[row + 1, col + 1] := sg.cells[col, row];
 
  if SaveWorkBook('k5.xlsx', ind) then
    StopExcel
  else
    ShowMessage('не удачно');
end;
 
function TForm1.SaveWorkBook(FileName:TFileName):boolean;
begin
  Result:=False;
  MyExcel.DisplayAlerts:=False;
  try
    MyBook.Save(FileName);
    Result := MyBook.Saved;
  except
  end;
  MyExcel.DisplayAlerts:=True;
end;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.10.2014, 09:36
Помогаю со студенческими работами здесь

C++, visual studio 2017, открытие xls файлов
Как открывать xls файлы с помощью visual с++ 2017 и читать/записывать значения ячеек? Просьба привести пример кода, скинуть статью или...

Открытие из заданного каталога всех файлов с заданым расширением (xls)
Никак не могу найти решение своей задачи, если у кого-нибудь есть желание и возможность, то помогите составить алгоритм/программу для...

Открытие xls файла после его редакции через ADO (office 2010)
Всем привет! Столкнулся с такой проблемой! Копирую файл xls, открываю его с помощью ADO, редактирую, сохраняю изменения. Потом этот...

Загрузка из Excel (XLS)
Здравствуйте, помогите есть справочник вид работ там есть "наименование" и "цена" .Нужно в него добавить данные из ексель . ...

XML -> Excel (XLS)
Всезнающий All, возникла проблема : нужно сгенерировать из некоторого XML документа excel-ский файл, как это можно сделать (не использую...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru