Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: excel/COM/SaveAs  (Прочитано 31705 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« : 07-11-2016 05:32 » 

не знаю точно, в какой бы раздел проблему запостить, пусть тут будет

Что делаю: из Qt посредством ActiveX создаю экземпляр экселя, наполняю (это всё работает нормально). Далее мне нужно сохранить в файл. Тут пока что знаю два варианта
1) (неудобный для юзера) оставить открытым окно экселя с документом, где юзер сам сохранит файл
2) вызвать SaveAs(путь) через динамический вызов процедуры.


Первый способ работает и у меня на компе, и у заказчика.  Второй у меня работает прекрасно (понимает даже пути с кириллицей и пробелами), однако у зака на двух компах файл просто не появляется там, где сохраняли через SaveAs. при этом из оставшегося открытым экселя можно прекрасно сохранить вручную  Быть такого не может

То ли какие-то хитрые права доступа где-то, я уже не знаю, на что думать.

Куда тут глядеть ?

PS  точно такой же отчёт полностью аналогичным способом делаю в ворде - с ним проблем нет

Может, какие флаги в SaveAs для экселя нужно указать ?
« Последнее редактирование: 07-11-2016 06:23 от Алексей++ » Записан

RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 07-11-2016 06:47 » 

Посмотри один из множества примеров SaveAs: http://stackoverflow.com/questions/14634453/how-to-use-workbook-saveas-with-automatic-overwrite

Код: (Visual Basic)
Set xls = CreateObject("Excel.Application")    
xls.DisplayAlerts = False
...
wb.SaveAs fullFilePath, AccessMode:=xlExclusive,ConflictResolution:=Excel.XlSaveConflictResolution.xlLocalSessionChange

Возможно это важно.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #2 : 07-11-2016 07:10 » 

щас попробую

Добавлено через 53 минуты и 26 секунд:
передачу параметров в функцию экселя из Qt ещё не поборол ) Но наткнулся ещё на одну интересную функцию - SaveCopyAs , всего с одним параметром - путём

Заказчика жду в эфир, чтобы опробовать
« Последнее редактирование: 07-11-2016 08:03 от Алексей1153 » Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #3 : 07-11-2016 09:04 » 

с вызовом кое-как разобрался. Пришлось магические константы искать. По поводу тестов - надо ждать заказчика

Код:
//xlNormal=-4143                                                      ;//[FileFormat],
//xlNoChange=1 ,xlShared=2, xlExclusive=3                               ;//[AccessMode As XlSaveAsAccessMode = xlNoChange],
//xlUserResolution=1, xlLocalSessionChanges=2 ,xlOtherSessionChanges=3  ;//[ConflictResolution],

QList<QVariant> l;
l<<filepath                     ;//[Filename],
l<<-4143/*xlNormal*/            ;//[FileFormat],
l<<""                           ;//[Password],
l<<""                           ;//[WriteResPassword],
l<<false                        ;//[ReadOnlyRecommended],
l<<false                        ;//[CreateBackup],
l<<3/*xlExclusive"*/            ;//[AccessMode As XlSaveAsAccessMode = xlNoChange],
l<<2/*xlLocalSessionChanges"*/  ;//[ConflictResolution],
l<<false                        ;//[AddToMru],
l<<false                        ;//[TextCodepage],
l<<false                        ;//[TextVisualLayout]

m_workbook->dynamicCall(
"SaveAs("
" QVariant"   //[Filename],
",QVariant"   //[FileFormat],
",QVariant"   //[Password],
",QVariant"   //[WriteResPassword],
",QVariant"   //[ReadOnlyRecommended],
",QVariant"   //[CreateBackup],
",QVariant"   //[AccessMode As XlSaveAsAccessMode = xlNoChange],
",QVariant"   //[ConflictResolution],
",QVariant"   //[AddToMru],
",QVariant"   //[TextCodepage],
",QVariant"   //[TextVisualLayout]
")",l
);
« Последнее редактирование: 07-11-2016 10:38 от Алексей++ » Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #4 : 07-11-2016 15:03 » 

Ром, не знаю, что там намучено в SaveAS, ничего не помогает. В общем сработал только метод SaveCopyAs

К счастью, у него всего один единственный аргумент )

спасибо
Записан

HandKot
Молодой специалист

ru
Offline Offline

« Ответ #5 : 08-11-2016 04:23 » 

2) вызвать SaveAs(путь) через динамический вызов процедуры.
Второй у меня работает прекрасно (понимает даже пути с кириллицей и пробелами), однако у зака на двух компах файл просто не появляется там, где сохраняли через SaveAs. при этом из оставшегося открытым экселя можно прекрасно сохранить вручную  Быть такого не может

То ли какие-то хитрые права доступа где-то, я уже не знаю, на что думать.

Куда тут глядеть ?

PS  точно такой же отчёт полностью аналогичным способом делаю в ворде - с ним проблем нет

Может, какие флаги в SaveAs для экселя нужно указать ?
могу предложить
1. посмотреть ошибки
2. посмотреть куда же сохранился файл
Записан

I Have Nine Lives You Have One Only
THINK!
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #6 : 08-11-2016 05:17 » 

HandKot,

1 - а какие именно там ошибки смотреть ? Скажем, вернётся QVariant(bool) == false , хз, что думать ) Но я не проверял, что там

2 - файл просто не сохраняется никуда. Путь я выводил на экран для отладки, потом смотрел по этому пути - нету ничего. но это у заказчика, а у меня всё нормально

В целом, меня SaveCopyAs уже устраивает )
Записан

HandKot
Молодой специалист

ru
Offline Offline

« Ответ #7 : 08-11-2016 10:33 » 

не виден весь код, но может поможет
Can't save excel file with QaxObject


ЗЫЖ чисто в академических целях
Записан

I Have Nine Lives You Have One Only
THINK!
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #8 : 09-11-2016 04:30 » new

HandKot, ну так весь код в ответе #3 Улыбаюсь

По ссылке - там парень напоролся на эскейп-последовательности, то есть, он неверно путь задавал. У меня путь задан верно

а m_workbook у меня там валидный - это 100%
Записан

Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines