На главную страницу
Русский English
 


Поддержка
Форум
Техподдержка
Закрытый разделПерсональная

Авторизация

Запомнить меня на этом компьютере
  Забыли свой пароль?
  Регистрация



Поиск по сайту


Подписка

Изменение параметров

Hits 67419303
10653
Hosts 3609217
2254
Visitors 53571782
10252

119


Главная / Поддержка / Форумы / Макро

Форум «Макро»

Версия для печати Версия для печати

Список форумов
Новые темы
Список тем
Поиск по форумам
Помощь
Войти
Регистрация


Тема: «Считывание с экселя » в форуме: Макро   Просмотров: 8557
 
Kristina Kan
Заглянувший
 
Всего сообщений: 5
Дата регистрации: 27.03.2016
Создано: 30.04.2016 14:35:39
 
 
Здравствуйте!
Столкнулась с проблемой считывания данных с экселя.
Только недавно начала работать с растром и с самим VBScript. Не могу понять, в чем ошибка...
Закрытую книгу открывает правильно, но не записывает значения в "узлы" Печально
Помогите найти ошибку в коде:

Set objExcel = CreateObject("Excel.Appli­cation")
Set wkb = objExcel.Workbooks.Open("­путь к файлу")
Set wks = objExcel.Worksheets("data­")
set tNode=Rastr.Tables("node"­)
dVstart=Array(0,0)
aHeaders=Array("Тип","Ном­ер","название","U_ном","Н­омер СХН","Район","Р_н","Q_н",­"Р_r","Q_r","V_зд","Q_min­","Q_max")
aColHeaders=Array("tip","­ny","name","uhom","nsx","­na","pn","qn","pg","qg","­vzd","qmin","qmax")
CopyData dVstart(0),dVstart(1),wkb­,aColHeaders,tNode
objExcel.Visible=true
sub CopyData(Y,X,wkb,aColHead­ers, wks)
set tData = wkb.Worksheets("data")
for i=LBound(aColHeaders) to UBound(aColHeaders)
for j=Y+1 To (wks.Count+Y)
wks.Cols(aColHeaders(i)).­Z(j-Y-1).Value=tData.Cell­s(j,X+i+1)
next
next
end sub
 
Профиль
Наверх
Вадим
Гость
 
Создано: 30.04.2016 14:59:08
 
 
объект wks не таблица Rastrwin в строке
wks.Cols(aColHeaders(i)).­?Z(j-Y-1).Value=tData.Cel­l?s(j,X+i+1)
надо wks на tNode заменить
 
Наверх
Kristina Kan
Заглянувший
 
Всего сообщений: 5
Дата регистрации: 27.03.2016
Создано: 30.04.2016 15:07:40
 
 
Вадим,

заменила...

к сожалению, все равно не работает

Set objExcel = CreateObject("Excel.Appli­cation")
Set wkb = objExcel.Workbooks.Open("­путь")
Set wks = objExcel.Worksheets("data­")
set tNode=Rastr.Tables("node"­)
dVstart=Array(0,0)
aHeaders=Array("Тип","Ном­ер","название","U_ном","Н­омер СХН","Район","Р_н","Q_н",­"Р_r","Q_r","V_зд","Q_min­","Q_max")
aColHeaders=Array("tip","­ny","name","uhom","nsx","­na","pn","qn","pg","qg","­vzd","qmin","qmax")
CopyData dVstart(0),dVstart(1),wkb­,aColHeaders,tNode
sub CopyData(Y,X,wkb,aColHead­ers, wks)
set tData = wkb.Worksheets("data")
for i=LBound(aColHeaders) to UBound(aColHeaders)
for j=Y+1 To (wks.Count+Y)
tNode.Cols(aColHeaders(i)­).Z(j-Y-1).Value=tData.Ce­lls(j,X+i+1)
next
next
end sub

я думала, что возможная проблема в том, что я не прописываю добавление таблицы в коллекцию... но команда Add Rastr.Tables.tNode отмечается как ошибка
 
Профиль
Наверх
Вадим
Гость
 
Создано: 30.04.2016 16:55:24
 
 
1. Использования дублирующих названий переменных для разных объектов (переменная wks в начале - книга, в процедуре wks - таблица Узлы) ведет к ошибкам. Не делайте так в будущем
2. У таблиц Rastra
count возвращает число строк, соответствующих заданной выборке
Size ? число строк в таблице
Вам нужно size использовать, так как выборок у вас нет
3. в функции Z() нужно убрать Y, так как уже задали смещение

sub CopyData(Y,X,wkb,aColHead­ers, tnode)
set tData = wkb.Worksheets("data")
for i=LBound(aColHeaders) to UBound(aColHeaders)
for j=Y+1 To (tnode.size)
tnode.Cols(aColHeaders(i)­).Z(j-1)=tData.Cells(j,X+­i+1)
next
next
end sub

Вообще идея со смещениями Y,X неочень

4. используйте хорошую, проверенную временем функцию
ReadCSV CSV_KOD,file,param,div,de­fpar (почитайте в справке)
легче и меньше кода
 
Наверх
Kristina Kan
Заглянувший
 
Всего сообщений: 5
Дата регистрации: 27.03.2016
Создано: 01.05.2016 09:03:25
 
 
Вадим,
спасибо за ваши рекомендации. я постаралась исправить код согласно вашим советам.

но я все равно не понимаю, почему у меня не работает импорт данных...

для экспорта все работает правильно:

sub CopyData(wkb,wks,aColHead­ers)
set tData = wkb.Worksheets("data")
for i=LBound(aColHeaders) to UBound(aColHeaders)
for j=1 To (wks.Count)
tData.Cells(j,i+1).Value=­wks.Cols(aColHeaders(i)).­Z(j-1)
next
next
end sub

для импорта же... запускаю макрос, обновляю таблицу узлов, но ничего не изменяется

CopyData wkb,aColHeaders,tNode
sub CopyData(wkb,aColHeaders,­ tNode)
set tData = wkb.Worksheets("data")
for i=LBound(aColHeaders) to UBound(aColHeaders)
for j=1 To (tNode.Size)
tNode.Cols(aColHeaders(i)­).Z(j-1).Value=tData.Cell­s(j,i+1)
next
next
end sub

простите мне мое невежество в этом вопросе(((
но мне правда и нужно разобраться, и я сама этого хочу.
помогите, пожалуйста, разобраться
 
Профиль
Наверх
Вадим
Гость
 
Создано: 01.05.2016 15:55:48
 
 
а вы импорт делаете при наличии строк в таблице узлы в растре? Просто в экселе задается сразу строки и столбцы для записи/считывния. В растре нужно самому добавлять строки.. Поэтому макрос будет работать, если нужное количество строк уже добавлено в таблицу for j=1 To (tNode.Size) как раз нужно, чтобы таблица была непустая
и Z(j-1).Value у вас разве не выдает ошибку? надо просто z(j-1) =
 
Наверх
Kristina Kan
Заглянувший
 
Всего сообщений: 5
Дата регистрации: 27.03.2016
Создано: 02.05.2016 14:39:17
 
 
Вадим,

огромное вам спасибо, теперь работает!

добавила строки в растр и все скопировалось)))
и убрала ".Value"
вот конечный вариант процедуры:

CopyData wkb,aColHeaders,tNode
sub CopyData(wkb,aColHeaders,­ tNode)
set tData = wkb.Worksheets("data")
for i=LBound(aColHeaders) to UBound(aColHeaders)
for j=1 To (tNode.Size)
tNode.Cols(aColHeaders(i)­).Z(j-1)=tData.Cells(j,i+­1)
next
next
 
Профиль
Наверх
Kristina Kan
Заглянувший
 
Всего сообщений: 5
Дата регистрации: 27.03.2016
Создано: 02.05.2016 14:52:06
 
 
только теперь почему-то возникает сообщение, что значение не попадает в ожидаемый диапазон(((
 
Профиль
Наверх
Вадим
Гость
 
Создано: 03.05.2016 09:50:16
 
 
Если работаете на 64битной машине, дописывайте к объекту
tData.Cells(j,i+?1).value
Если что, то в соседней теме это обсуждается
http://www.rastrwin.ru/su­pport/forum/...essage6823­
 
Наверх



Читают тему
гостей: 2, пользователей: 0, из них скрытых: 0


Список форумов
Новые темы
Список тем
Поиск по форумам
Помощь
Войти
Регистрация







Программный комплекс «RasrWin»
Программный комплекс «RastrWin»
© «RastrWin», 1988-2019