Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Создание текстового файла из базы excel (http://forum.oszone.net/showthread.php?t=345294)

4zz 23-05-2020 23:50 2922345

Создание текстового файла из базы excel
 
Уважаемые знатоки!
помогите написать bat файл по следующим условиям:
Есть текстовый файл, состоящий из 10 строк:
[0]
name=ХХХХХ
bdate=23.05.1969
btime=08:00:00
event=Таймер
photo=
RunOnce=0
cmd=
ScanDays=5
Color=

И есть база данных в формате excel состоящая из трех столбцов - номер, фио и дата.

Необходимо чтобы при запуске бат файла копировался блок строк(10+пустая) из текстового файла, вставлялся в конец этого файла при этом заменял значения полей [0], name=, bdate= на значения из файла базы excel и так до окончания заполненных строк в базе excel.
Спасибо!)

Fors1k 24-05-2020 15:48 2922417

Код:

Param(
    $pathXls = "C:\База.xlsx",
    $pathTxt = "C:\bm.txt"
)cls

$i=2;$a = gc $pathTxt -To 10;$Excel = New-Object -ComObject Excel.Application
$WorkBook=$Excel.Workbooks.Open($pathXls);$WorkSheet=$WorkBook.Sheets.Item(1)
do{
    $b=$a;$i++;$b+=''
    $b[0] = "[$($Worksheet.Range("b$i").text)]"
    $b[1] = "name=$($Worksheet.Range("c$i").text)"
    $b[2] = "bdate=$($Worksheet.Range("d$i").text)"
    if ($( $Worksheet.Range("b$i").text )  -eq  '')
    {break}$b|Add-Content $pathTxt
}
while($true);$Excel.Quit();notepad $pathTxt


megaloman 24-05-2020 20:36 2922464

VBS
Код:

FileInTxt = "Z:\Box_In\TxtBlanc.txt"
FileInBas = "Z:\Box_In\База.xlsx"

FileOut = "Z:\Box_Out\База.txt"

MRep = Array("^\[.*\] *", "B3", _
        "name=", "C3", _
        "bdate=", "D3")

LRep = LBound(MRep)
URep = UBound(MRep)

Set Book = CreateObject("Excel.Application")
Book.Visible = False 'True  ' False        '
Book.Workbooks.Open FileInBas

Set FSO = CreateObject("Scripting.FileSystemObject")

Set fIn = FSO.OpenTextFile(FileInTxt, 1, False)
InTxt = Trim(fIn.ReadAll)
fIn.Close

If Right(InTxt, 2) <> vbCrLf Then InTxt = InTxt + vbCrLf

Set F = FSO.CreateTextFile(FileOut, True)

Skip = ""
With CreateObject("VBScript.RegExp")
    .IgnoreCase = True
    j = 0
    Do
        If Trim(Book.Range(MRep(LRep + 1)).Offset(j, 0)) = "" Then Exit Do
        For i = LRep To URep Step 2
            If i = LRep Then
                .Pattern = MRep(i) + vbCrLf
                InTxt = .Replace(InTxt, "[" + CStr(Book.Range(MRep(i + 1)).Offset(j, 0)) + "]" + vbCrLf)
            Else
                .Pattern = vbCrLf + MRep(i) + ".*" + vbCrLf
                InTxt = .Replace(InTxt, vbCrLf + MRep(i) + CStr(Book.Range(MRep(i + 1)).Offset(j, 0)) + vbCrLf)
            End If
        Next
        j = j + 1
        F.Write Skip + InTxt
        Skip = vbCrLf
    Loop
End With
F.Close
'Book.ActiveWorkbook.Close
Book.Quit



Время: 12:41.

Время: 12:41.
© OSzone.net 2001-