Русский
English
Главная
RastrWin
Программа
Последние изменения
Часто задаваемые вопросы
Аннотация
Лицензирование и защита от копирования
Права Windows для пользователя RastrWin
Курсы
Компонентная архитектура
Интерфейс
Инструкция по установке
Документация, видео, презентации
Свидетельство о регистрации
RastrKZ
RastrMDP
RastrOS
ZamerSeti
Архив
Bars-Lincor
Расчетная модель
Система моделирования
Последние изменения
Программа
Инструкция пользователя
Инсталляция
RUStab
Загрузка
Последние изменения
Поддержка
Поддержка
Форум
Техподдержка
Персональная
Макро студия
Макро студия
Автоматизация
Работа с SQL
Оценка параметров ЛЭП и ТР
Эффективность размыкания сети
Анализ напряжений в Excel
Автоматизация с "AutoIt"
Создание графа сети из режима
Передача графики в SVG
Вариантные расчеты
Импортозамещение
О нас
О компании
Фотогалерея
Пользователи
Отчеты об использовании своего имущества
Реквизиты
Поддержка
Форум
Техподдержка
Персональная
Авторизация
Запомнить меня на этом компьютере
Забыли свой пароль?
Регистрация
Поиск по сайту
Подписка
Новости Bars- Lincor
Новости RastrWin
Общие новости
Новости RUStab
Изменение параметров
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
Список форумов
Новые темы
Список тем
Поиск по форумам
Помощь
Войти
Регистрация
Программный комплекс «RastrWin»
© «RastrWin», 1988-2019