Автор | Сообщение |
|
| |
Пост N: 4
Зарегистрирован: 08.02.11
|
|
Отправлено: 16.03.11 09:57. Заголовок: Скопировать лист Экселя?
Может глаз замылился Хочу скопировать лист из файла в новый oExcel:Workbooks:Open(cFile) oBook:=oExcel:ActiveWorkbook() oBook:Activate() oBook:Worksheets(1):Activate() oSheet := oBook:Worksheets(1) oSheet:Copy() oWorkBookN:=oExcel:WorkBooks:Add() //новая пустая книга oSheetN:=oWorkBookN:Worksheets(1) oSheetN:Paste() // ??? сообщение об ошибке Error 1553980/14 E_OUTOFMEMORY: PASTE Called from TOLEAUTO:PASTE(0) Called from PRINTAKT2(513) ... но при этом имею в Экселе открытую книгу исходного файла Книга1 с нужной копией страницы Книга2 пустая сделано в 46-й версии МиниГУИ - программа старая нужно изменить/добавить
|
|
|
Ответов - 10
[только новые]
|
|
|
| Администратор
|
Пост N: 1848
Зарегистрирован: 23.05.05
|
|
Отправлено: 16.03.11 10:27. Заголовок: Это ошибка не харбор..
Это ошибка не харбора и не hmg. Excel выполняет команду Paste, возникает out of memory, и генерируется ошибка в приложении hmg А если сделать копипаст в экселе, ошибка есть ?
|
|
|
|
| |
Пост N: 36
Зарегистрирован: 20.02.11
|
|
Отправлено: 16.03.11 11:32. Заголовок: лови
лови разгадку oExcel:Workbooks:Open(cFile) oBook:=oExcel:ActiveWorkbook() oBook:Activate() oBook:Worksheets(1):Activate() oSheet := oBook:Worksheets(1) oSheet:Cells:Select() oExcel:Selection:Copy() oWorkBookN:=oExcel:WorkBooks:Add() //новая пустая книга oSheetN:=oWorkBookN:Worksheets(1) oSheetN:Paste()
|
|
|
|
| |
Пост N: 5
Зарегистрирован: 08.02.11
|
|
Отправлено: 17.03.11 07:21. Заголовок: Что-то не помогает. ..
Что-то не помогает. Лист в ту же книгу копирует без проблем oSheet:Cells:Select() oExcel:Selection:Copy() //oSheet2 := oBook:Worksheets(2) //oSheet2:Paste() oWorkBookN:=oExcel:WorkBooks:Add() //новая пустая книга oSheetN:=oWorkBookN:Worksheets(1) oSheetN:Paste() // ??? а в другую - ошибка. Уже другая. Error 1552500/3 DISP_E_MEMBERNOTFOUND: PASTE Called from TOLEAUTO:PASTE(0) Called from PRINTAKT2(512)
|
|
|
|
| Администратор
|
Пост N: 1849
Зарегистрирован: 23.05.05
|
|
Отправлено: 17.03.11 08:37. Заголовок: SADSTAR4 пишет: а в..
SADSTAR4 пишет: цитата: | а в другую - ошибка. Уже другая. |
| Может, в новой книге надо сначала создать пустой лист ?
|
|
|
|
| |
Пост N: 90
Зарегистрирован: 17.06.10
|
|
Отправлено: 17.03.11 08:38. Заголовок: Попробуй не лист коп..
Попробуй не лист копировать, а RANGE в лист новой книги
|
|
|
|
| |
Пост N: 37
Зарегистрирован: 20.02.11
|
|
Отправлено: 17.03.11 12:55. Заголовок: проделай руками
Проделай все руками и запиши макрос, посмотри как надо. у меня получилось так Cells.Select Selection.Copy Workbooks.Add ActiveSheet.Paste соответствующий код в харбуре oSheet:Cells:Select() oExcel:Selection:Copy() oWorkBookN:=oExcel:WorkBooks:Add() oWorkBookN:ActiveSheet:Paste() но и предыдущий пример работал без ругани на офисе 2010 и последней сборке минигуи как предлагает fil - тоже выход, если диаgазон известен , проще использовать range
|
|
|
|
| |
Пост N: 6
Зарегистрирован: 08.02.11
|
|
Отправлено: 18.03.11 06:46. Заголовок: нашел возможность уб..
нашел возможность убрать ошибку, но не понял причину. реально у меня была еще одна строка - колич.листов в новой книге oSheet:Cells:Select() oExcel:Selection:Copy() oExcel:SheetsInNewWorkbook := 1 //количество листов в новой книге oWorkBookN:=oExcel:WorkBooks:Add() //новая пустая книга oSheetN:=oWorkBookN:Worksheets(1) oSheetN:Paste() // ??? вылетало на ошибку хотя новая книга с одним листом создавалась. убрал эту строку - не вылетает. P.S. окончательный код такой oExcel:Workbooks:Open(cFile) oBook:=oExcel:ActiveWorkbook() oBook:Activate() oBook:Worksheets(1):Activate() oSheet := oBook:Worksheets(1) oSheet:Cells:Copy() oWorkBookN:=oExcel:WorkBooks:Add() //новая пустая книга oSheetN:=oWorkBookN:Worksheets(1) oSheetN:Paste() oSheet:Range("A1"):Copy() //для очистки клипборда чтобы не всплывал диалог ВклипбордеБольшойОбъем oBook:Saved:=.t. //чтобы не всплывал диалог СохранитьИзменения oBook:Close() oSheetN:Activate() ... работа с листом ... oExcel:Visible := .T.
|
|
|
|
| |
Пост N: 38
Зарегистрирован: 20.02.11
|
|
Отправлено: 18.03.11 09:23. Заголовок: Попробуй так ...
Вместо этого : SADSTAR4 пишет: цитата: | oSheet:Range("A1"):Copy() //для очистки клипборда чтобы не всплывал диалог ВклипбордеБольшойОбъем oBook:Saved:=.t. //чтобы не всплывал диалог СохранитьИзменения |
| Попробуй так: oExcel:Set( "DisplayAlerts", .F. )
|
|
|
|
| Администратор
|
Пост N: 1850
Зарегистрирован: 23.05.05
|
|
Отправлено: 18.03.11 10:50. Заголовок: Haz пишет: Попробуй..
Haz пишет: цитата: | Попробуй так: oExcel:Set( "DisplayAlerts", .F. ) |
| еще можно так: oExcel:CutCopyMode := .f. при этом снимается выделение ячеек
|
|
|
|
| |
Пост N: 7
Зарегистрирован: 08.02.11
|
|
Отправлено: 21.03.11 04:48. Заголовок: еще более окончатель..
еще более окончательный код после всех советов и "Бритвы Оккама" oExcel:Workbooks:Open(cFile) oBook:=oExcel:ActiveWorkbook() oBook:Worksheets(1):Cells:Copy() oBookN:=oExcel:WorkBooks:Add() //новая пустая книга oSheet:=oBookN:Worksheets(1) oSheet:Paste() t:=oExcel:Get( "DisplayAlerts") //временно сохранить текущую настройку oExcel:Set( "DisplayAlerts", .F. ) oBook:Close() oExcel:Set( "DisplayAlerts", t ) //восстановить предыдущую настройку oSheet:Activate() ... работа с листом ... oExcel:Visible := .T.
|
|
|
|