Страница: 1 | 2 |
Вопрос: Как перенести из Word-а в Excel с помощью VBA кое-
Добавлено: 24.04.08 14:04
Автор вопроса: ibm
Господа, добрый день!
Помогите решить задачку. Есть документ в ворде (диссертация), в тексте этого документа полно ссылок на источники литературы. Ссылка выглядит так: [какое-то число]. "Какое-то число" - это число от 1 до 999. Какие-то числа пропущены.. Нужно написать програмку, которая пробежится по тексту, соберет все "какие-то числа" и кинет их в столбик в эксель или в текстовый файл..
Как это сделать? Только, пожалуйста, не пишите логику работы программы - она ясна. У меня проблема со знанием операторов VBA, забились за давностью..
Спасибо
Ответы
Всего ответов: 17
Номер ответа: 1
Автор ответа:
ADSemenov.ru
Вопросов: 5
Ответов: 276
Web-сайт:
Профиль | | #1
Добавлено: 24.04.08 14:28
Просто пробежать по всем элементам коллекции ThisDocument.Characters и собрать в массив всё содержимое квадратных скобок.
Номер ответа: 2
Автор ответа:
ibm
Вопросов: 1
Ответов: 4
Профиль | | #2
Добавлено: 24.04.08 15:14
Спасибо. Но.. это Вам просто, не мне. Я не знаю? как собрать в массив все значения в квадратных скобках.. не знаю как потом из получившегося массива вставить значения в excel..
Номер ответа: 3
Автор ответа:
J. Smith
ICQ: ненавижу
Вопросов: 40
Ответов: 477
Web-сайт:
Профиль | | #3
Добавлено: 24.04.08 16:23
Почти закончил.
Текст документа в Word 2003:
Qasdfko ajsdg kljasdg [345] wery lkjwsdgl kjsdfgsdfgh. Длордлордло [998].
Цукжплоывап цукпрждлоц. Ывапмдлоысмрирц цукпвыа [556]. Цкупдлоыврадплор [867] ывпдлоывапр всмиздшщгуц. Ывапдюлывап ывапдлоыврап ывапрдлыова. [777] цыдплорывап цупдлорывап вапо. Ывапдлоывапдол ывапждлоывап в [555].
[1] sdflgkjsdhfg – фывпдлофрывпдор фывпдлофырвап ывапываорывтфь.
[12] ывадпрлщор – фывпдлофрывпдор фывпдлофырвап ывапываорывтфь.
Номер ответа: 4
Автор ответа:
J. Smith
ICQ: ненавижу
Вопросов: 40
Ответов: 477
Web-сайт:
Профиль | | #4
Добавлено: 24.04.08 16:24
Sub Макрос1()
' 24.04.2008 Макрос написал Adam Smith
Dim tmpLng As Long
Dim tmpInt As Integer
Dim tmpStr As String
With ThisDocument
For tmpLng = 1 To .Words.Count - 1
If .Words(tmpLng).Text = "[" Then tmpStr = tmpStr & .Words(tmpLng + 1).Text & vbCrLf
Next
MsgBox "Результаты поиска:" & vbCrLf & vbCrLf & tmpStr, vbInformation, vbOKOnly
End With
End Sub
Номер ответа: 5
Автор ответа:
J. Smith
ICQ: ненавижу
Вопросов: 40
Ответов: 477
Web-сайт:
Профиль | | #5
Добавлено: 24.04.08 16:26
Книгу в Эксель новую будеш создавать или использовать уже существующую?
Номер ответа: 6
Автор ответа:
ADSemenov.ru
Вопросов: 5
Ответов: 276
Web-сайт:
Профиль | | #6
Добавлено: 24.04.08 16:30
Не советовал бы через слова — могут отсутствовать пробелы по ошибке. Если нет в тексте чистых цифр в скобках, то более правильно разобрать текст по символам. Заодно и на цифры проконтролтровать.
Номер ответа: 7
Автор ответа:
J. Smith
ICQ: ненавижу
Вопросов: 40
Ответов: 477
Web-сайт:
Профиль | | #7
Добавлено: 24.04.08 16:35
Мысль правильная, только работать будет на порядок медленнее. Я просто подумал если человек диссертацию пишет то элементарные ошибки в тексте наверное исправил. Пишу как проще
Номер ответа: 8
Автор ответа:
J. Smith
ICQ: ненавижу
Вопросов: 40
Ответов: 477
Web-сайт:
Профиль | | #8
Добавлено: 24.04.08 16:37
Корпорация чё молчиш? Макрос в документ вписать сможеш? Оперативнее ато мне бежать скоро.
Номер ответа: 9
Автор ответа:
J. Smith
ICQ: ненавижу
Вопросов: 40
Ответов: 477
Web-сайт:
Профиль | | #9
Добавлено: 24.04.08 17:04
Вот те.
Sub Макрос1()
' 24.04.2008 Макрос написал Adam Smith
' код не оптимизирован притензии не принимаются
Dim tmpLng As Long
Dim tmpStr As String
With ThisDocument
For tmpLng = 1 To .Words.Count - 1
If .Words(tmpLng).Text = "[" Then tmpStr = tmpStr & .Words(tmpLng + 1).Text & vbCrLf
Next
End With
'MsgBox "Результаты поиска:" & vbCrLf & vbCrLf & tmpStr, vbInformation, vbOKOnly
Dim ObjectExcel As Object
Dim tmpArr() As String
Dim tmpInt As Integer
tmpArr = Split(tmpStr, vbCrLf)
Set ObjectExcel = CreateObject("Excel.Application"
ObjectExcel.Visible = True
ObjectExcel.Workbooks.Open FileName:=":\Мои_документы\Книга1.XLS"
With ObjectExcel.ActiveSheet
For tmpInt = 0 To UBound(tmpArr)
.Cells(2 + tmpInt, 2).Value = tmpArr(tmpInt)
Next
End With
ObjectExcel.ActiveWorkbook.Close Save
ObjectExcel.Quit
Set ObjectExcel = Nothing
End Sub
Номер ответа: 10
Автор ответа:
ibm
Вопросов: 1
Ответов: 4
Профиль | | #10
Добавлено: 24.04.08 17:17
Ребята, спасибо Вам огромное!!!
Адам Смит, спасибо!
Корпорация..))
Номер ответа: 11
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #11
Добавлено: 25.04.08 09:44
Нормальные люди пишут диссерации в TeX и не мучаются с такими вещами, как список литературы, ссылки и т.п.
Номер ответа: 12
Автор ответа:
J. Smith
ICQ: ненавижу
Вопросов: 40
Ответов: 477
Web-сайт:
Профиль | | #12
Добавлено: 25.04.08 10:21
Жаль что такой УМИЩЕ направлен на унижение окружающих.
Номер ответа: 13
Автор ответа:
ibm
Вопросов: 1
Ответов: 4
Профиль | | #13
Добавлено: 25.04.08 11:08
Adam Smith, у меня файл экселя пустой получился.. Я не очень понимаю, что такое words в терминах VB? Ссылки сделаны вот так в тексте: "Слава КПСС [100]". А в Вашем коде слово - это "[". Правильно ли я понимаю, что для корректной работы скрипта нужно, чтобы после "[" шел пробел?
2Sharp: а что такое TeX? "Я как бы это сказать первый раз слышу такое слово" (c) Незнайка на луне
Спасибо.
Номер ответа: 14
Автор ответа:
J. Smith
ICQ: ненавижу
Вопросов: 40
Ответов: 477
Web-сайт:
Профиль | | #14
Добавлено: 25.04.08 11:46
"От оно чё михалыч!"
Вот такбы сразу, надо чтоб в ексель попали не циферки из квард. скоб. а полностью "Слава КПСС [100]", верно?
Эт немного другая история. Самому интересно VBA в памяти освежить. Вообще знаеш создай документ Word с парой страничек из диссертации, и чтобы там ссылок побольше
пришли на емайл, я макрос напишу и сюда скину.
Words - эт массив слов документа. Качай, учи VBA еси интересно http://rapidshare.de/files/11204069/VBA_for_dummers.rar.html
Номер ответа: 15
Автор ответа:
ibm
Вопросов: 1
Ответов: 4
Профиль | | #15
Добавлено: 25.04.08 12:21
Adam Smith, извините, если я вас запарил.. Нет, Вы все правильно сначала поняли, нужно именно содержимое квадратных скобок вытащить, т.е., например, есть такой текст:
Добрый день [100] уважаемые участники форума!
Есть [очень большая] проблема!
Помогите [102, c.100].
Спасибо.
В экселевский файл нужно выкинуть в столбик:
100
очень большая
102, с.100
Я запускаю Вашу программу, но файл xls получается пустой. Может быть версия Excel-я 2007, в этом все дело?
Еще раз большое спасибо.