![]() |
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
Компьютерный форум OSzone.net » Сфера Microsoft » Microsoft Office (Word, Excel, Outlook и т.д.) » 2003/XP/2000 - Экспорт из xls в txt по заданному формату |
|
2003/XP/2000 - Экспорт из xls в txt по заданному формату
|
Ветеран Сообщения: 1384 |
Здравствуйте.
Есть некоторый xls файл, в котором несколько однотипных лисов. На листах в одинаковом виде содержится контактная информация о сотрудниках: Фамилия Имя, почта, мобильный телефон и т.д. Мне нужно из этого файла сделать экспорт и на выходе получить файл txt некоторого формата. К примеру Иван Иванов: +79281234567 Пётр Петров: +79881234567 Наверняка подобная тема поднималась не один раз, я просто никогда с этим не сталкивался. Подкиньте, пожалуйста, пару ссылок по моему вопросу. |
|
------- Отправлено: 17:17, 19-06-2013 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать 1. Приложите образец рабочей книги.
2. Экспорт нужен со всех листов в один файл? 3. Приведите точный вид выходного файла, который требуется получить в итоге. |
Отправлено: 19:31, 19-06-2013 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Модератор Сообщения: 16855
|
Профиль | Сайт | Отправить PM | Цитировать Файл -> Сохранить как... -> В списке форматов выбирайте на свой вкус любой текстовый формат -> OK
И всё. |
------- Отправлено: 20:03, 19-06-2013 | #3 |
Ветеран Сообщения: 1384
|
Профиль | Отправить PM | Цитировать Цитата Iska:
Цитата Iska:
Цитата Iska:
--Phone Book-- : Item1 Name :Иванов Альберт (моб1) Item1 Number :79031234567 Item1 Ring :0 Item2 Name :Иванов Альберт (моб2) Item2 Number :79051244747 Item2 Ring :0 Item3 Name :Иванов Альберт (внут) Item3 Number :103 Item3 Ring :0 P.S. В итоге получается часть конфигурационного файла для IP телефона D-Link DPH-150s. Хочу загрузить в него телефоны всей компании. Подумываю, что может стоит перевести всё в csv и просто написать скрипт на bash или powershell, котороый будет парсить всё это и создавать файл таким как мне вздумается. С VBA дело не имел и думаю не просто будет разобраться. |
|||
------- Отправлено: 09:59, 20-06-2013 | #4 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Option Explicit Sub OutToFile() Const adOpenStatic = 3 Const adLockOptimistic = 3 Const adCmdText = 1 Dim objWorksheet As Worksheet Dim objConnection As Object Dim objRecordset As Object Dim objFSO As Object Dim objTS As Object Dim intRow As Integer Set objConnection = CreateObject("ADODB.Connection") Set objRecordset = CreateObject("ADODB.Recordset") objConnection.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=""" & ThisWorkbook.FullName & """;Extended Properties=""Excel 8.0;HDR=Yes;"";" intRow = 0 Set objFSO = CreateObject("Scripting.FileSystemObject") Set objTS = objFSO.CreateTextFile(objFSO.BuildPath(ThisWorkbook.Path, objFSO.GetBaseName(ThisWorkbook.Name) & ".txt"), True) For Each objWorksheet In ThisWorkbook.Worksheets With objRecordset .Open "SELECT * FROM [" & objWorksheet.Name & "$] WHERE [Фамилия] IS NOT NULL;", objConnection, adOpenStatic, adLockOptimistic, adCmdText objTS.WriteLine "--Phone Book-- :" Do Until .EOF With .Fields If Not IsNull(.Item("мобильнный 1")) Then intRow = intRow + 1 objTS.WriteLine "Item" & CStr(intRow) & " Name :" & .Item("Фамилия").Value & " " & .Item("Имя").Value & " (моб1)" objTS.WriteLine "Item" & CStr(intRow) & " Number :" & .Item("мобильнный 1").Value objTS.WriteLine "Item" & CStr(intRow) & " Ring :0" End If If Not IsNull(.Item("мобильнный 2")) Then intRow = intRow + 1 objTS.WriteLine "Item" & CStr(intRow) & " Name :" & .Item("Фамилия").Value & " " & .Item("Имя").Value & " (моб2)" objTS.WriteLine "Item" & CStr(intRow) & " Number :" & .Item("мобильнный 2").Value objTS.WriteLine "Item" & CStr(intRow) & " Ring :0" End If If Not IsNull(.Item("доб# №")) Then intRow = intRow + 1 objTS.WriteLine "Item" & CStr(intRow) & " Name :" & .Item("Фамилия").Value & " " & .Item("Имя").Value & " (внут)" objTS.WriteLine "Item" & CStr(intRow) & " Number :" & .Item("доб# №").Value objTS.WriteLine "Item" & CStr(intRow) & " Ring :0" End If End With .MoveNext Loop .Close End With Next objWorksheet objTS.Close Set objTS = Nothing Set objFSO = Nothing Set objRecordset = Nothing objConnection.Close Set objConnection = Nothing End Sub Цитата Tonny_Bennet:
2. Информация не одинаковая. 3. Цитата Tonny_Bennet:
4. Цитата:
5. Почему строка с «Светлана Криворучка» «стоит» отдельно? 6. Как поступать с отсутствующими номерами, исключать из вывода? 7. «Рабочий телефон» — не выводится вовсе? 8. В реальности тоже будет куча пустых рабочих листов, або нет? Из предложенного примера я убрал пустые листы. 9. Какова должна быть кодировка выходного текстового файла? |
||||
Отправлено: 01:19, 21-06-2013 | #5 |
Ветеран Сообщения: 1384
|
Профиль | Отправить PM | Цитировать Цитата Iska:
Цитата Iska:
Цитата Iska:
Цитата Iska:
Цитата Iska:
Цитата Iska:
Цитата Iska:
Цитата Iska:
P.S. Спасибо за макрос. Проблема в том, что я даже не знаю куда его вставить ![]() |
||||||||
------- Отправлено: 11:14, 21-06-2013 | #6 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата Tonny_Bennet:
В открывшееся окно редактора VBA кода модуля «ЭтаКнига» вставьте скопированный отсюда код макроса. Затем установите курсор ввода куда-нибудь внутрь вставленного текста процедуры «OutToFile()» и нажмите «F5». Если всё пройдёт успешно — рядом с файлом рабочей книги будет создан одноимённый текстовый файл. P.S. Вы не ответили: Цитата Tonny_Bennet:
|
||
Отправлено: 17:46, 21-06-2013 | #7 |
Ветеран Сообщения: 1384
|
Профиль | Отправить PM | Цитировать |
------- Отправлено: 15:01, 24-06-2013 | #8 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Tonny_Bennet, упакуйте документ с реальными данными в архив под паролем, выложите на RGhost, ссылку и пароль в личку или на почту (если последнее — отдельными письмами).
Цитата Tonny_Bennet:
|
|
Отправлено: 23:46, 24-06-2013 | #9 |
Ветеран Сообщения: 1384
|
Профиль | Отправить PM | Цитировать Iska, огромное спасибо вам за труды. Но я что-то подумал и решил набросать скрипт на bash-е. Который будет парсить *.csv.
IP телефон умеет обновлять конфигурацию через ftp или tftp сервер, а они у меня в любом случае под Ubunt-ой стоят. Вот я и сделал всё на одной платформе. Ниже скрипт, который у меня получился. Пусть не ругают меня скриптописатели, работет и ладно ![]() #!/bin/bash #Скрипт парсит файлы формата *.csv (дирректория сфайлами $1) и создаёт телефонную книгу для d-link dph-150s (параметр $2) #номер, с которого начинаются записи в телефонной книге #счётчик записей выходного файла n=1 function translit() { text=$1 text=${text//а/a} text=${text//А/A} text=${text//б/b} text=${text//Б/B} text=${text//в/v} text=${text//В/V} text=${text//г/g} text=${text//Г/G} text=${text//д/d} text=${text//Д/D} text=${text//е/e} text=${text//Е/E} text=${text//ё/e} text=${text//Ё/E} text=${text//ж/zj} text=${text//Ж/Zj} text=${text//з/z} text=${text//З/Z} text=${text//и/i} text=${text//И/I} text=${text//й/y} text=${text//к/k} text=${text//К/K} text=${text//л/l} text=${text//Л/L} text=${text//м/m} text=${text//М/M} text=${text//н/n} text=${text//Н/N} text=${text//о/o} text=${text//О/O} text=${text//п/p} text=${text//П/P} text=${text//р/r} text=${text//Р/R} text=${text//с/s} text=${text//С/S} text=${text//т/t} text=${text//Т/T} text=${text//у/u} text=${text//У/U} text=${text//ф/f} text=${text//Ф/F} text=${text//х/h} text=${text//Х/H} text=${text//ц/ts} text=${text//Ц/Ts} text=${text//ч/ch} text=${text//Ч/Ch} text=${text//ш/sh} text=${text//Ш/Sh} text=${text//щ/sh} text=${text//Щ/Sh} text=${text//ь/} text=${text//ы/y} text=${text//ъ/} text=${text//э/e} text=${text//Э/E} text=${text//ю/yu} text=${text//Ю/Yu} text=${text//я/ya} text=${text//Я/Ya} echo $text } #список файлов с расширением *.csv file_list_in=`ls $1 | grep ".csv$"` #Виндовый символ переноса строки. CR=$(printf '\015') #просматриваем все файлы по очереди for pb_file_in in $file_list_in; do echo "Обрабатывать файл $pb_file_in? (1/0)" read is_file #если файл обрабатывается if [[ $is_file = 1 ]] then #перекодируем исходный файл в UTF-8 iconv -t UTF-8 -o $1$pb_file_in $1$pb_file_in echo "Выгружать внутренние номера? (1/0)" read is_internal echo "Выгружать номера мобильный 1? (1/0)" read is_mob1 echo "Выгружать номера мобильный 2? (1/0)" read is_mob2 #читаем первые 150 строк из исходного файла преобразуем прочтённое в массив head -n 150 $1$pb_file_in | while IFS=';' read -a item line do #Если выбрано выгружать внутренние номера if [[ $is_internal = 1 ]] then #Если добавочный номер попадает под регулярное выражение (три цифры) добавляем номер телефона в книгу if [[ "${item[5]}" =~ [0-9]{3} ]] then echo Item$n Name :$(translit ${item[2]}) $(translit ${item[1]})'(int)'$CR >> $2 echo Item$n Number :$(translit ${item[5]})$CR >> $2 echo Item$n Ring :0$CR >> $2 n=$[$n+1] fi fi #Если выбрано выгружать номера номера мобильный 1 if [[ $is_mob1 = 1 ]] then #Если первый мобильный телефон попадает под регулярное выражение ( 7(XXX)XXX-XX-XX) добавляем номер телефона в книгу if [[ "${item[6]}" =~ 7[(]{0,1}[0-9]{3}[)]{0,1}[0-9]{3}[-]{0,1}[0-9]{2}[-]{0,1}[0-9]{2} ]] then # Удаляем лишние символы в номере телефона: ()- item[6]=${item[6]//(/} item[6]=${item[6]//)/} item[6]=${item[6]//-/} echo Item$n Name :$(translit ${item[2]}) $(translit ${item[1]})'(mob1)'$CR >> $2 echo Item$n Number :$(translit ${item[6]})$CR >> $2 echo Item$n Ring :0$CR >> $2 n=$[$n+1] fi fi #Если выбрано выгружать номера номера мобильный 2 if [[ $is_mob2 = 1 ]] then #Если второй мобильный телефон попадает под регулярное выражение ( 7(XXX)XXX-XX-XX) добавляем номер телефона в книгу if [[ "${item[7]}" =~ 7[(]{0,1}[0-9]{3}[)]{0,1}[0-9]{3}[-]{0,1}[0-9]{2}[-]{0,1}[0-9]{2} ]] then # Удаляем лишние символы в номере телефона item[7]=${item[7]//(/} item[7]=${item[7]//)/} item[7]=${item[7]//-/} echo Item$n Name :$(translit ${item[2]}) $(translit ${item[1]})'(mob2)'$CR >> $2 echo Item$n Number :$(translit ${item[7]})$CR >> $2 echo Item$n Ring :0$CR >> $2 n=$[$n+1] fi fi done fi done exit 0 |
------- Последний раз редактировалось Tonny_Bennet, 28-06-2013 в 11:34. Причина: усовершенствовал скрипт Отправлено: 10:34, 25-06-2013 | #10 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - [решено] узнать размер папок. экспорт в txt | shadowbat | Скриптовые языки администрирования Windows | 55 | 22-08-2019 11:17 | |
VBS/WSH/JS - [решено] Экспорт данных из одного txt файла в другой | TRaMeLL | Скриптовые языки администрирования Windows | 31 | 17-10-2012 11:33 | |
Удаление записей из таблицы по заданному времени на php | magwolf | Вебмастеру | 5 | 14-08-2009 14:13 | |
Разное - написать программу, чтобы она вытаскивала данные из .txt или .xls | exo | Программирование и базы данных | 5 | 10-07-2009 20:46 | |
Теория - Нужна помощь по формату IMG гармин | ВВС | Программирование и базы данных | 5 | 15-02-2009 18:18 |
|