Справка по API
#
XLSX.XLSXFile — Type
XLSXFile представляет собой ссылку на файл Excel.
Он создается с использованием XLSX.readxlsx или XLSX.openxlsx.
Из XLSXFile можно перейти к ссылке XLSX.Worksheet, как показано в примере ниже.
Пример
xf = XLSX.readxlsx("myfile.xlsx")
sh = xf["mysheet"] # получает ссылку на лист (worksheet)
#
XLSX.readxlsx — Function
readxlsx(source::Union{AbstractString, IO}) :: XLSXFile
Основная функция для чтения Excel-файла. Эта функция считывает весь Excel-файл в память и возвращает закрытый XLSX-файл.
Рассмотрите возможность использования XLSX.openxlsx для отложенной загрузки содержимого Excel-файла.
#
XLSX.openxlsx — Function
openxlsx(f::F, source::Union{AbstractString, IO}; mode::AbstractString="r", enable_cache::Bool=true) where {F<:Function}
Открывает XLSX-файл для чтения и (или) записи. Возвращает открытый XLSX-файл, который будет автоматически закрыт после применения f к файлу.
Синтаксис Do
Эту функцию следует использовать с синтаксисом do, как показано ниже:
XLSX.openxlsx("myfile.xlsx") do xf
# считывает данные из `xf`
end
Режимы работы с файлами
Аргумент mode управляет способом открытия файла. Разрешены следующие режимы:
-
r: режим чтения. Существующие данные вsourceбудут доступны для чтения. Это поведение по умолчанию. -
w: режим записи. Открывает пустой файл, который будет записан вsource. -
rw: режим редактирования. Открываетsourceдля редактирования. По окончании работы функции файл будет сохранен на диск.
|
Известно, что режим |
Аргументы
-
sourceявляется вводом-выводом или полным путем к файлу. -
modeявляется режимом работы с файлами, как было описано в предыдущем разделе. -
enable_cache:
Если enable_cache=true, все считанные ячейки листа будут кэшироваться. Если ячейка листа считывается дважды, вместо чтения с диска во второй раз будет использоваться кэшированное значение.
Если enable_cache=false, ячейки листа будут всегда считываться с диска. Рекомендуется использовать, если требуется считать таблицу, которая не помещается в памяти.
Значение по умолчанию — enable_cache=true.
Примеры
Чтение из файла
В следующем примере показано чтение ячеек листа по одной строке за раз, где myfile.xlsx является таблицей, которая не помещается в памяти.
julia> XLSX.openxlsx("myfile.xlsx", enable_cache=false) do xf
for r in XLSX.eachrow(xf["mysheet"])
# считывает что-то из строки `r`
end
end
Запись нового файла
XLSX.openxlsx("new.xlsx", mode="w") do xf
sheet = xf[1]
sheet[1, :] = [1, Date(2018, 1, 1), "test"]
end
Редактирование существующего файла
XLSX.openxlsx("edit.xlsx", mode="rw") do xf
sheet = xf[1]
sheet[2, :] = [2, Date(2019, 1, 1), "add new line"]
end
См. также описание функции XLSX.readxlsx.
openxlsx(source::Union{AbstractString, IO}; mode="r", enable_cache=true) :: XLSXFile
Поддерживает открытие XLSX-файла без использования do-синтаксиса. В этом случае пользователь отвечает за закрытие XLSXFile с помощью close или его записи в файл с помощью XLSX.writexlsx.
См. также описание функции XLSX.writexlsx.
#
XLSX.writexlsx — Function
writexlsx(output_source, xlsx_file; [overwrite=false])
Записывает Excel-файл, заданный с помощью xlsx_file::XLSXFile, в ввод-вывод или путь к файлу output_source.
Если overwrite=true, output_source (когда это путь к файлу) будет перезаписан, если он существует.
#
XLSX.sheetnames — Function
sheetnames(xl::XLSXFile)
sheetnames(wb::Workbook)
Возвращает вектор с именами листов для данной книги.
#
XLSX.sheetcount — Function
sheetcount(xlsfile) :: Int
Подсчитывает количество листов в книге.
#
XLSX.Worksheet — Type
Worksheet представляет собой ссылку на лист (worksheet) файла Excel.
Из Worksheet можно запрашивать ячейки, значения ячеек и диапазоны.
Пример
xf = XLSX.readxlsx("myfile.xlsx")
sh = xf["mysheet"] # получает ссылку на лист (worksheet)
println( sh[2, 2] ) # обращается к элементу B2 (2-я строка, 2-й столбец)
println( sh["B2"] ) # также можно использовать имя ячейки
println( sh["A2:B4"] ) # или диапазон ячеек
println( sh[:] ) # все данные внутри измерения листа
#
XLSX.readdata — Function
readdata(source, sheet, ref)
readdata(source, sheetref)
Возвращает скаляр или матрицу со значениями из таблицы.
См. также описание функции XLSX.getdata.
Примеры
Эти вызовы функций эквивалентны.
julia> XLSX.readdata("myfile.xlsx", "mysheet", "A2:B4")
3×2 Array{Any,2}:
1 "first"
2 "second"
3 "third"
julia> XLSX.readdata("myfile.xlsx", 1, "A2:B4")
3×2 Array{Any,2}:
1 "first"
2 "second"
3 "third"
julia> XLSX.readdata("myfile.xlsx", "mysheet!A2:B4")
3×2 Array{Any,2}:
1 "first"
2 "second"
3 "third"
#
XLSX.getdata — Function
getdata(sheet, ref)
getdata(sheet, row, column)
Возвращает скаляр или матрицу со значениями из таблицы. ref может быть ссылкой на ячейку или диапазоном.
Индексирование в Worksheet приведет к диспетчеризации в метод getdata.
Пример
julia> f = XLSX.readxlsx("myfile.xlsx")
julia> sheet = f["mysheet"]
julia> matrix = sheet["A1:B4"]
julia> single_value = sheet[2, 2] # B2
См. также описание функции XLSX.readdata.
getdata(ws::Worksheet, cell::Cell) :: CellValue
Возвращает представление Julia заданного значения ячейки. Тип данных результата выбирается в зависимости от значения ячейки, а также ее стиля.
Например, дата хранится в электронной таблице в виде целых чисел, а стиль — это информация, которая учитывается при выборе Date в качестве типа результата.
Для чисел, если стиль подразумевает, что число визуализируется с десятичными знаками, метод вернет значение с плавающей запятой, даже если в XML таблицы число хранится как целое.
Если ячейка (cell) имеет пустое значение или пустую строку (String), данная функция вернет missing.
#
XLSX.getcell — Function
getcell(xlsxfile, cell_reference_name) :: AbstractCell
getcell(worksheet, cell_reference_name) :: AbstractCell
getcell(sheetrow, column_name) :: AbstractCell
getcell(sheetrow, column_number) :: AbstractCell
Возвращает внутреннее представление ячейки листа.
Возвращает XLSX.EmptyCell, если в ячейке нет данных.
getcell(sheet, ref)
Возвращает ячейку AbstractCell, представляющую ячейку в электронной таблице.
Пример:
julia> xf = XLSX.readxlsx("myfile.xlsx")
julia> sheet = xf["mysheet"]
julia> cell = XLSX.getcell(sheet, "A1")
#
XLSX.getcellrange — Function
getcellrange(sheet, rng)
Возвращает матрицу с ячейками в виде Array{AbstractCell, 2}. rng должен быть допустимым диапазоном ячеек, как в "A1:B2".
#
XLSX.row_number — Function
row_number(c::CellRef) :: Int
Возвращает номер строки заданной ссылки на ячейку.
#
XLSX.column_number — Function
column_number(c::CellRef) :: Int
Возвращает номер столбца заданной ссылки на ячейку.
#
XLSX.eachrow — Function
eachrow(sheet)
Создает итератор строк для листа.
Пример: запрос всех ячеек из столбцов с 1 по 4.
left = 1 # 1-й столбец
right = 4 # 4-й столбец
for sheetrow in XLSX.eachrow(sheet)
for column in left:right
cell = XLSX.getcell(sheetrow, column)
# выполняет какие-либо действия с ячейкой
end
end
#
XLSX.readtable — Function
readtable(
source,
sheet,
[columns];
[first_row],
[column_labels],
[header],
[infer_eltypes],
[stop_in_empty_row],
[stop_in_row_function],
[keep_empty_rows]
) -> DataTable
Возвращает табличные данные из электронной таблицы в виде структуры XLSX.DataTable. Используйте эту функцию для создания DataFrame из пакета DataFrames.jl.
Используйте аргумент columns, чтобы указать, какие столбцы необходимо получить. Например, "B:D" выберет столбцы B, C и D. Если значение columns не задано, алгоритм найдет первую последовательность идущих подряд непустых ячеек.
Используйте first_row, чтобы указать первую строку таблицы. first_row=5 будет искать таблицу, начинающуюся со строки листа 5. Если значение first_row не задано, алгоритм будет искать первую непустую строку в таблице.
header — это логическое значение (Bool), указывающее, является ли первая строка заголовком. Если header=true и column_labels не указаны, надписи столбцов таблицы будут считываться из первой строки таблицы. Если header=false и column_labels не указаны, алгоритм создаст надписи столбцов. Значение по умолчанию — header=true.
Используйте column_labels, чтобы указать имена для заголовка таблицы.
Используйте infer_eltypes=true, чтобы получить data в виде Vector{Any} типизированных векторов. Значение по умолчанию — infer_eltypes=false.
stop_in_empty_row является логическим значением, указывающим, обозначает ли пустая строка конец таблицы. Если stop_in_empty_row=false, TableRowIterator будет продолжать извлекать строки до тех пор, пока на листе не останется ни одной строки. Поведение по умолчанию — stop_in_empty_row=true.
stop_in_row_function является функцией, которая принимает TableRow и возвращает Bool, указывая, достигнут ли конец таблицы.
Пример для stop_in_row_function:
function stop_function(r)
v = r[:col_label]
return !ismissing(v) && v == "unwanted value"
end
keep_empty_rows определяет, сохранять (true) или отбрасывать (false) из результирующей таблицы строки, в которых все значения столбцов равны missing. keep_empty_rows никогда не влияет на границы таблицы. На количество строк, считываемых с листа, влияют только first_row, stop_in_empty_row и stop_in_row_function (если они указаны). keep_empty_rows проверяется только после того, как определены первая и последняя строки таблицы, чтобы определить, оставлять или отбрасывать пустые строки между первой и последней строками.
Пример
julia> using DataFrames, XLSX
julia> df = DataFrame(XLSX.readtable("myfile.xlsx", "mysheet"))
См. также описание: XLSX.gettable.
#
XLSX.gettable — Function
gettable(
sheet,
[columns];
[first_row],
[column_labels],
[header],
[infer_eltypes],
[stop_in_empty_row],
[stop_in_row_function],
[keep_empty_rows]
) -> DataTable
Возвращает табличные данные из электронной таблицы в виде структуры XLSX.DataTable. Используйте эту функцию для создания DataFrame из пакета DataFrames.jl.
Используйте аргумент columns, чтобы указать, какие столбцы необходимо получить. Например, "B:D" выберет столбцы B, C и D. Если значение columns не задано, алгоритм найдет первую последовательность идущих подряд непустых ячеек.
Используйте first_row, чтобы указать первую строку таблицы. first_row=5 будет искать таблицу, начинающуюся со строки листа 5. Если значение first_row не задано, алгоритм будет искать первую непустую строку в таблице.
header — это логическое значение (Bool), указывающее, является ли первая строка заголовком. Если header=true и column_labels не указаны, надписи столбцов таблицы будут считываться из первой строки таблицы. Если header=false и column_labels не указаны, алгоритм создаст заголовки столбцов. Значение по умолчанию — header=true.
Используйте column_labels в качестве вектора символов, чтобы указать имена для заголовка таблицы.
Используйте infer_eltypes=true, чтобы получить data в виде Vector{Any} типизированных векторов. Значение по умолчанию — infer_eltypes=false.
stop_in_empty_row является логическим значением, указывающим, обозначает ли пустая строка конец таблицы. Если stop_in_empty_row=false, TableRowIterator будет продолжать извлекать строки до тех пор, пока на листе не останется ни одной строки. Поведение по умолчанию — stop_in_empty_row=true.
stop_in_row_function является функцией, которая принимает TableRow и возвращает Bool, указывая, достигнут ли конец таблицы.
Пример для stop_in_row_function
function stop_function(r)
v = r[:col_label]
return !ismissing(v) && v == "unwanted value"
end
keep_empty_rows определяет, сохранять (true) или отбрасывать (false) из результирующей таблицы строки, в которых все значения столбцов равны missing. keep_empty_rows никогда не влияет на границы таблицы. На количество строк, считываемых с листа, влияют только first_row, stop_in_empty_row и stop_in_row_function (если они указаны). keep_empty_rows проверяется только после того, как определены первая и последняя строки таблицы, чтобы определить, оставлять или отбрасывать пустые строки между первой и последней строками.
Пример
julia> using DataFrames, XLSX
julia> df = XLSX.openxlsx("myfile.xlsx") do xf
DataFrame(XLSX.gettable(xf["mysheet"]))
end
См. также описание: XLSX.readtable.
#
XLSX.eachtablerow — Function
eachtablerow(sheet, [columns]; [first_row], [column_labels], [header], [stop_in_empty_row], [stop_in_row_function], [keep_empty_rows])
Создает итератор строк таблицы. Каждый элемент итератора имеет тип TableRow.
header — это логическое значение, указывающее, является ли первая строка таблицы заголовком таблицы.
Если header == false и column_labels не указаны, имена столбцов будут сгенерированы в соответствии с именами столбцов, содержащимися в Excel-файле.
Аргумент columns представляет собой диапазон столбцов, как в "B:E". Если columns не указан, диапазон столбцов будет определяться по непустым смежным ячейкам в первой строке таблицы.
Пользователь может заменить имена столбцов, присвоив необязательную входную переменную column_labels с помощью Vector{Symbol}.
stop_in_empty_row является логическим значением, указывающим, обозначает ли пустая строка конец таблицы. Если stop_in_empty_row=false, итератор будет продолжать извлекать строки до тех пор, пока на листе не останется ни одной строки. Поведение по умолчанию — stop_in_empty_row=true. Итератор может возвращать пустые строки, когда stop_in_empty_row=false.
stop_in_row_function является функцией, которая принимает TableRow и возвращает Bool, указывая, достигнут ли конец таблицы.
Пример для stop_in_row_function:
function stop_function(r)
v = r[:col_label]
return !ismissing(v) && v == "unwanted value"
end
keep_empty_rows определяет, будет ли итератор строк сохранять (true) или пропускать (false) строки, в которых все значения столбцов равны missing. keep_empty_rows никогда не влияет на границы итератора. На количество строк, считываемых с листа, влияют только first_row, stop_in_empty_row и stop_in_row_function (если они указаны). keep_empty_rows проверяется только после того, как определены первая и последняя строки таблицы, чтобы определить, оставлять или отбрасывать пустые строки между первой и последней строками.
Пример кода:
for r in XLSX.eachtablerow(sheet)
# r - это `TableRow`. Значения считываются с помощью заголовков или номеров столбцов.
rn = XLSX.row_number(r) # номер строки `TableRow`.
v1 = r[1] # будет считывать значение в столбце 1 таблицы.
v2 = r[:COL_LABEL2] # будет считывать значение в столбце с заголовком `:COL_LABEL2`.
end
См. также описание функции XLSX.gettable.
#
XLSX.writetable — Function
writetable(filename, table; [overwrite], [sheetname])
Записывает Tables.jl table в указанный файл.
writetable(filename::AbstractString, tables::Vector{Pair{String, T}}; overwrite::Bool=false)
writetable(filename::AbstractString, tables::Pair{String, Any}...; overwrite::Bool=false)
writetable(filename, data, columnnames; [overwrite], [sheetname])
-
dataявляется вектором столбцов. -
columnamesявляется вектором заголовков столбцов. -
overwriteявляется логическим значением (Bool), управляющим необходимостью перезаписи файла (filename), если он уже существует. -
sheetnameявляется именем листа.
Пример
import XLSX
columns = [ [1, 2, 3, 4], ["Hey", "You", "Out", "There"], [10.2, 20.3, 30.4, 40.5] ]
colnames = [ "integers", "strings", "floats" ]
XLSX.writetable("table.xlsx", columns, colnames)
См. также описание: XLSX.writetable!.
writetable(filename::AbstractString; overwrite::Bool=false, kw...)
writetable(filename::AbstractString, tables::Vector{Tuple{String, Vector{Any}, Vector{String}}}; overwrite::Bool=false)
Записывает несколько таблиц.
kw является списком именованных аргументов переменной. Каждый элемент должен иметь следующий формат: sheetname=( data, column_names ), data является вектором столбцов, а column_names — вектором заголовков столбцов.
Пример:
julia> import DataFrames, XLSX
julia> df1 = DataFrames.DataFrame(COL1=[10,20,30], COL2=["Fist", "Sec", "Third"])
julia> df2 = DataFrames.DataFrame(AA=["aa", "bb"], AB=[10.1, 10.2])
julia> XLSX.writetable("report.xlsx", "REPORT_A" => df1, "REPORT_B" => df2)
#
XLSX.writetable! — Function
writetable!(sheet::Worksheet, table; anchor_cell::CellRef=CellRef("A1")))
Записывает Tables.jl table на указанный лист.
writetable!(sheet::Worksheet, data, columnnames; anchor_cell::CellRef=CellRef("A1"))
Записывает на лист (sheet) табличные данные data с заголовками, заданными columnnames, начиная с anchor_cell.
data должен быть вектором столбцов. columnnames должен быть вектором заголовков столбцов.
См. также описание: XLSX.writetable.
#
XLSX.rename! — Function
rename!(ws::Worksheet, name::AbstractString)
Переименовывает Worksheet.
#
XLSX.addsheet! — Function
addsheet!(workbook, [name]) :: Worksheet
Создает новый лист с именованным name. Если имя (name) не указано, создается уникальное имя.