3 Вывод данных в файл
Пусть в рабочем листе Excel в столбце A (начиная с ячейки A1) хранятся номера контрактов, в столбце B – количество поставляемого товара по соответствующему контракту, в столбце C – цена за одно изделие. Требуется вывести в текстовый файл номера и стоимости контрактов, стоимость которых превышает 10000 ден.ед. В текстовом файле номер и стоимость контракта должны представлять собой одну строку; номер и стоимость должны быть разделены пробелом. Имеется также текстовое поле Imya_faila, где пользователь указывает имя файла для вывода данных. Если файл с указанным именем уже существует, то данные должны добавляться в него.
Приведем программу для решения этой задачи.
Sub V_fail()
Set fso = CreateObject("scripting.filesystemobject")
rez_file = Imya_faila.Value
Set vyvod = fso.OpenTextFile(rez_file, ForAppending, True)
Set d = Cells(1, 1).CurrentRegion
m = d.Rows.Count
For i = 1 To m
stoimost = d.Cells(i, 2).Value * d.Cells(i, 3).Value
If stoimost > 10000 Then
nomer = d.Cells(i, 1).Value
stroka = CStr (nomer) + " " + CStr(dohod)
vyvod.WriteLine (stroka)
End If
Next i
vyvod.Close
End Sub
Здесь, как и предыдущем примере, оператор Set fso = CreateObject("scripting.filesystemobject") создает объект с именем fso, который будет использоваться для операций с файлами (все имена в этом операторе - зарезервированные).
В операторе rez_file = Imya_faila.Value переменной rez_file присваивается значение текстового поля Imya_faila, где пользователем должно быть указано имя файла для вывода данных.
В операторе Set vyvod = fso.OpenTextFile(rez_file, ForAppending, True) файл с заданным именем (хранящимся в переменной rez_file) открывается для добавления данных (ForAppending). Значение True указывает, что в случае, если указанный файл не существует, он будет создан (и также открыт для добавления данных). С открываемым файлом связывается объект vyvod.
Затем определяется заполненная данными область рабочего листа, начиная с ячейки Cells(1,1) (т.е. с A1); этой области будет соответствовать объект d. Определяется количество строк (m = d.Rows.Count).
Затем для каждой строки вычисляется стоимость указанного в ней контракта (переменная stoimost). Если она превышает 10000, то из номера контракта и его стоимости составляется строка: stroka = CStr (nomer) + " " + CStr(stoimost). Здесь CStr – функция преобразования из числовых данных в строковые, знак + обозначает операцию сцепления строк. В операторе vyvod.WriteLine (stroka) полученная строка выводится в файл, соответствующий объекту vyvod (здесь WriteLine – команда вывода строки в файл).
По окончании цикла, т.е. после вывода в файл всех необходимых строк, файл закрывается (оператор vyvod.Close).
4 Обмен данными между двумя файлами
Пусть имеется некоторый текстовый файл, где в каждой строке находится или некоторое число, или некоторый текст. Требуется вывести все числа из этого файла, превышающие 10, в другой файл. Имя файла с исходными данными должно выбираться пользователем. Имя файла для вывода результатов - D:\User\chisla.txt. Если этот файл уже существует, то его прежнее содержимое должно удаляться.
Приведем программу для решения этой задачи.
Sub iz_faila_v_fail()
Set fso = CreateObject("scripting.filesystemobject")
ChDrive "D"
ChDir "D:\User"
otkr_file = Application.GetOpenFilename("Text Files (*.txt), *.txt")
rez_file = "D:\User\chisla.txt"
Set ishod = fso.OpenTextFile(otkr_file, ForReading)
Set rezult = fso.OpenTextFile(rez_file, ForWriting, True)
Do While Not ishod.AtEndOfStream
stroka = ishod.ReadLine
If IsNumeric(stroka) Then
x = CSng(stroka)
If x > 10 Then rezult.WriteLine (x)
End If
Loop
ishod.Close
rezult.Close
End Sub
Большинство операций, выполненных в этой программе, рассмотрено ранее.
В операторе Set rezult = fso.OpenTextFile(rez_file, ForWriting, True) файл с заданным именем (хранящимся в переменной rez_file) открывается для записи данных с потерей прежних данных (ForWriting). Значение True указывает, что в случае, если указанный файл не существует, он будет создан. Если бы требовалось добавлять данные в этот файл (с сохранением прежних данных), то вместо ForWriting было бы указано ForAppending. С открываемым файлом связывается объект rezult.
Следует обратить внимание, что в конце работы программы необходимо закрыть все использовавшиеся в ней файлы (в данном примере – два файла, с которыми были связаны объекты ishod и result).