|
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 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 | |
|