Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - Импорт данные из текстового файла (*.txt) в таблицу Excel

Ответить
Настройки темы
Любой язык - Импорт данные из текстового файла (*.txt) в таблицу Excel

Пользователь


Сообщения: 84
Благодарности: 0

Профиль | Отправить PM | Цитировать


Доброго времени суток!

Господа, помогите, пожалуйста, написать код выполняющий извлечение нужной информации из текстовый файлов в файл Excel.
Ставлю задачу: в текстовые файлы я сохранил данные сертификатов проверки ключей. Их много, в каждом меня интересует, например СНИЛС:, Фамилия:, Должность:, Подразделение:, Организация: и т.д. Т.е. слева название с двоеточием, справа значение. Потом конец строки. Каждое значение с новой строки.
Один такой обработанный файл равен одной строчки в Excel, столбцы соответствуют искомым значениям.
Далее я просто возьму список сотрудников с их должностями и наложу на полученный файл Excel, при разногласии закажу новый сертификат. Типа сверки, глазами это делать рутинно и тяжело.

Спасибо. Думаю идея понятна.

Отправлено: 22:54, 05-10-2019

 

Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Serg2010, замечательно. Нам осталось только увидеть образцы этих текстовых файлов и потребной Вам результирующей Рабочей книги Microsoft Excel, упакованных в архив.
Это сообщение посчитали полезным следующие участники:

Отправлено: 22:59, 05-10-2019 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Contributor


Сообщения: 2708
Благодарности: 1684

Профиль | Отправить PM | Цитировать


Цитата:
Далее я просто возьму список сотрудников с их должностями и наложу на полученный файл Excel,
список в бумажном виде ? Наверное, это тоже таблица и, наверное, в Еxcel. Имхо, логично делать эту операцию (импорт файла и сравнение со списком) макросом в таблице Excel со списком сотрудников. Нужны образцы файлов: список сотрудников, данные сертификатов, в каком виде хотите видеть результат.

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.

Это сообщение посчитали полезным следующие участники:

Отправлено: 07:44, 06-10-2019 | #3


Старожил


Сообщения: 235
Благодарности: 8

Профиль | Отправить PM | Цитировать


Serg2010, это можно сделать в Power Query. будут файлы - можно сказать конкретнее

Отправлено: 18:11, 07-10-2019 | #4


Пользователь


Сообщения: 84
Благодарности: 0

Профиль | Отправить PM | Цитировать


Вложения
Тип файла: 7z Пример обработки сертификата.7z
(4.0 Kb, 4 просмотров)

Спасибо за отклик, выкладываю образцы

Отправлено: 22:36, 11-10-2019 | #5


Пользователь


Сообщения: 84
Благодарности: 0

Профиль | Отправить PM | Цитировать


Вложения
Тип файла: 7z Пример обработки сертификата.7z
(4.0 Kb, 10 просмотров)

Образцы

Отправлено: 22:38, 11-10-2019 | #6


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Serg2010, попробуйте так (на WSH):
Скрытый текст
Код: Выделить весь код
Option Explicit

Const xlContinuous = 1
Const xlThin       = 2
Const xlAutomatic  = &HFFFFEFF7


Dim strSourceFolder

Dim objFSO
Dim objFile

Dim strContent

Dim objRegExp

Dim objExcel
Dim objWorkBook
Dim objRange


If WScript.Arguments.Count = 1 Then
	strSourceFolder = WScript.Arguments.Item(0)
	
	Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
	
	If objFSO.FolderExists(strSourceFolder) Then
		Set objRegExp = WScript.CreateObject("VBScript.RegExp")
		
		With objRegExp
			.IgnoreCase = True
			.MultiLine  = True
			
			.Pattern = _
				"Серийный номер\r\n" & _
				"-{64}\r\n" & _
				"((?:[\da-f]{2} ){15}[\da-f]{2})\r\n" & _
				"[\s\S]*" & _
				"Субъект\r\n" & _
				"-{64}\r\n" & _
				"СНИЛС: (\d{11})\r\n" & _
				"ОГРН: (\d{13})\r\n" & _
				"ИНН: (\d{12})\r\n" & _
				"Адрес, улица: (.*?)\r\n" & _
				"Отчество: .*?\r\n" & _
				"Фамилия: .*?\r\n" & _
				"Электронная почта: (.*?)\r\n" & _
				"Город: (.*?)\r\n" & _
				"Область: .*?\r\n" & _
				"Страна: .*?\r\n" & _
				"Должность: (.*?)\r\n" & _
				"Подразделение: (.*?)\r\n" & _
				"Организация: (.*?)\r\n" & _
				"Имя: (.*?)\r\n"
		End With
		
		Set objExcel    = WScript.CreateObject("Excel.Application")
		Set objWorkBook = objExcel.Workbooks.Add()
		Set objRange    = objWorkBook.Worksheets.Item(1).Range("A1").Resize(1, 11)
		
		With objRange
			.NumberFormat = "@"
			.Value = Array( _
						"Серийный номер-19", _
						"СНИЛС-48", _
						"ОГРН-49", _
						"ИНН-50", _
						"Адрес, улица-51", _
						"Электронная почта-54", _
						"Город-55", _
						"Должность-58", _
						"Подразделение-59", _
						"Организация-60", _
						"Имя-61" _
					)
		End With
		
		For Each objFile In objFSO.GetFolder(strSourceFolder).Files
			If StrComp(objFSO.GetExtensionName(objFile.Name), "txt", 0) = 0 Then
				With objFSO.OpenTextFile(objFile.Path)
					strContent = .ReadAll()
					.Close
				End With
				
				Set objRange = objRange.Offset(1, 0)
				
				If objRegExp.Test(strContent) Then
					With objRange
						.NumberFormat = "@"
						.Value = Collection2Array(objRegExp.Execute(strContent).Item(0).Submatches)
					End With
				Else
					WScript.Echo "Can't determine pattern in file [" & objFile.Name & "] correctly."
					
					With objRange
						.NumberFormat = "@"
						.Value = "Error while parsing file [" & objFile.Name & "]"
					End With
				End If
			Else
				' Nothing to do
			End If
		Next
		
		With objRange.Parent.UsedRange
			With .Borders
				.LineStyle  = xlContinuous
				.Weight     = xlThin
				.ColorIndex = xlAutomatic
			End With
			
			.Columns.AutoFit
		End With
		
		objExcel.Visible = True
		
		Set objRange    = Nothing
		Set objWorkBook = Nothing
		Set objExcel    = Nothing
		Set objRegExp   = Nothing
	Else
		WScript.Echo "Can't find source folder [" & strSourceFolder & "]."
		WScript.Quit 2
	End If
	
	Set objFSO = Nothing
Else
	WScript.Echo "Usage: cscript.exe //nologo """ & WScript.ScriptName & """ <Source folder>"
	WScript.Quit 1
End If

WScript.Quit 0
'-----------------------------------------------------------------------------

'-----------------------------------------------------------------------------
Function Collection2Array(objCollection)
	ReDim arrArray(objCollection.Count - 1)
	Dim i
	
	For i = LBound(arrArray) To UBound(arrArray)
		arrArray(i) = objCollection(i)
	Next
	
	Collection2Array = arrArray
End Function
'-----------------------------------------------------------------------------

Путь к целевому каталогу задаётся аргументом скрипта (также можно просто перетянуть папку на скрипт в Проводнике). Если указанный каталог существует, в нём перебираются все текстовые файлы, внутри каждого из которых делается попытка выделения искомых значений по заданному шаблону. При удачном соответствии строка в новосозданной Рабочей книге Microsoft Excel заполняется найденными соответствиями. Поскольку предназначено для ручной работы — сохранение Рабочей книги оставил Вам на откуп.


P.S. См. также Разбираем квалифицированные сертификаты X.509 в поисках ИНН, СНИЛС и ОГРН / Хабр.
Это сообщение посчитали полезным следующие участники:

Отправлено: 09:18, 12-10-2019 | #7


Аватара для DJ Mogarych

fascinating rhythm


Moderator


Сообщения: 6491
Благодарности: 1465

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
$src = gc "C:\temp\Пример обработки сертификата\Петров Иван Иванович.txt"
[array]$data = (($src |select -Skip 16 -First 3) -replace '-{2,}',': ') -join ''
$data += $src |select -Skip 47 -First 15
Получается такой формат:
Код: Выделить весь код
Серийный номер: 01 D1 1D 91 2F 01 1D 10 00 00 A5 35 21 B1 01 46
СНИЛС: 33333333333
ОГРН: 4444444444444
ИНН: 555555555555
Адрес, улица: пр. Ленина, 1
Отчество: Иван Иванович
Фамилия: Петров
Электронная почта: abc@xyz.ru
Город: Мирный
Область: 11 Прекрасная область
Страна: RU
Должность: начальник отдела
Подразделение: финансовый отдел
Организация: ООО "Цветочки"
Имя: Петров Иван Иванович
Но хоть убей не понимаю, как из этого сделать табличку csv, что-то затупил. Как из первого слова сделать свойство?

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)


Последний раз редактировалось DJ Mogarych, 12-10-2019 в 19:58.

Это сообщение посчитали полезным следующие участники:

Отправлено: 19:52, 12-10-2019 | #8


Старожил


Сообщения: 235
Благодарности: 8

Профиль | Отправить PM | Цитировать


Serg2010, попробуйте вариант в Power Query. Для обновления данных нажмите Ctrl+Alt+F5

Последний раз редактировалось v79italya, 18-10-2019 в 21:39.


Отправлено: 20:32, 12-10-2019 | #9


Забанен


Сообщения: 793
Благодарности: 260

Профиль | Цитировать


Цитата DJ Mogarych:
Но хоть убей не понимаю, как из этого сделать табличку csv, что-то затупил.
Например:
Код: Выделить весь код
,[String]((($$=gc file.txt)|select -f 16 -s 3) -replace '-{2,}',':') + ($$|select -s 47 -f  15) | ConvertFrom-Csv -h Data,Value -del ':' | ConvertTo-Csv -no
Это сообщение посчитали полезным следующие участники:

Отправлено: 21:23, 12-10-2019 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - Импорт данные из текстового файла (*.txt) в таблицу Excel

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
PowerShell - Свести в одну таблицу Excel данные из нескольких skorbut Скриптовые языки администрирования Windows 1 21-02-2017 17:42
VBS/WSH/JS - Импорт данных в форму Excel из xml файла VictorST Скриптовые языки администрирования Windows 2 28-06-2015 12:52
CMD/BAT - Сборка текстового файла из содержимого другого текстового файла icomboy Скриптовые языки администрирования Windows 0 10-09-2013 15:17
[решено] Вытащить ячейку из Excel файла и вставить в TXT файл garanov AutoIt 2 23-05-2012 14:16
Неправильно отображаются данные при вводе их из текстового файла! Sox Программирование и базы данных 3 08-03-2006 17:23




 
Переход