Чтение и запись файлов DBF

Введение

DBF (DataBase File) — это устаревший формат файлов баз данных, первоначально представленный dBASE в начале 1980-х годов. Несмотря на возраст формата, файлы DBF по-прежнему широко используются во многих отраслях для хранения структурированных данных, особенно в бухгалтерии, ГИС и других специализированных приложениях. Aspose.Cells позволяет легко интегрировать эти устаревшие файлы в современные рабочие процессы с электронными таблицами на Python через .NET.

Библиотека поддерживает как чтение, так и запись файлов DBF, предоставляя вам возможность:

  • Импортировать данные из существующих файлов DBF в объекты Workbook Aspose.Cells для дальнейшей обработки или преобразования в другие форматы.
  • Создавать новые файлы DBF с нуля или путём преобразования данных из других форматов электронных таблиц.
  • Сохранять определения полей, типы данных и структуры записей при передаче данных в формат DBF и из него.

Файлы DBF также можно открывать непосредственно в Microsoft Excel и других приложениях для работы с электронными таблицами, что делает их удобным мостом между устаревшими системами и современными инструментами для работы с электронными таблицами.

Поддерживаемые версии и функции DBF

Aspose.Cells поддерживает следующие версии формата DBF:

  • dBASE III — оригинальный и наиболее широко поддерживаемый вариант формата DBF.
  • dBASE IV — расширенная версия, которая поддерживает дополнительные типы данных и поля большего размера.

Поддерживаемые функции

Библиотека обеспечивает комплексную поддержку следующих операций:

  • Чтение данных DBF в объект Workbook с сохранением всех записей и определений полей.
  • Запись данных книги обратно в формат DBF для экспорта в приложения, совместимые с dBASE.
  • Обработка общих типов данных, используемых в файлах DBF, включая символьные, числовые, датовые и логические поля.
  • Сохранение определений полей, таких как имя поля, тип и длина, во время операций чтения/записи.

Ограничения и рекомендации

При работе с файлами DBF учитывайте следующие ограничения:

  • Максимальное количество полей в файле — 128.
  • Максимальный размер записи — 4000 байт.
  • Имена полей ограничены 10 символами, должны быть в верхнем регистре и не должны содержать пробелов.
  • Значения дат в файлах DBF хранятся в формате YYYYMMDD.
  • Кодировка символов может различаться в зависимости от исходного приложения (обычно Windows-1252 или OEM-кодировки).

Чтение файла DBF

Aspose.Cells упрощает загрузку данных из файла DBF в объект Workbook. Библиотека использует класс LoadOptions для указания исходного формата, обеспечивая корректную интерпретацию данных в процессе загрузки.

Чтение файла DBF с помощью Aspose.Cells

Чтобы прочитать файл DBF, необходимо создать экземпляр LoadOptions, установить его свойство load_format в значение LoadFormat.DBF и передать его в конструктор Workbook вместе с путём к файлу. После загрузки данные становятся доступными через коллекцию worksheets, где вы можете перебирать ячейки, извлекать значения или обрабатывать данные по мере необходимости.

Следующий пример демонстрирует, как загрузить существующий файл DBF в Aspose.Cells, получить доступ к его первому рабочему листу и прочитать значения ячеек.

import os
import aspose.cells as ac

data_dir = "Data/"
file_path = os.path.join(data_dir, "example.dbf")

load_options = ac.LoadOptions(ac.LoadFormat.DBF)

workbook = ac.Workbook(file_path, load_options)

worksheet = workbook.worksheets[0]

cells = worksheet.cells

lines = []

max_row = cells.max_data_row
max_col = cells.max_data_column

for i in range(max_row + 1):
    line_parts = []
    for j in range(max_col + 1):
        cell = cells[i, j]
        value = cell.string_value
        line_parts.append("|" + value)
    line_parts.append("|")
    lines.append("".join(line_parts))

result = "\n".join(lines) + ("\n" if lines else "")
print(result)

output_path = os.path.join(data_dir, "output.xlsx")
workbook.save(output_path, ac.SaveFormat.XLSX)

print("DBF file loaded successfully. Converted XLSX saved at: " + output_path)

Запись файла DBF

Запись данных в файл DBF выполняется по тому же шаблону, что и сохранение в любом другом формате электронных таблиц с помощью Aspose.Cells. Вы создаёте или загружаете Workbook, заполняете рабочий лист данными, а затем вызываете метод save, указывая SaveFormat.DBF в качестве целевого формата.

Запись файла DBF с помощью Aspose.Cells

Чтобы создать файл DBF, выполните следующие шаги:

  1. Создайте новый экземпляр Workbook.
  2. Получите доступ к первому рабочему листу из коллекции worksheets.
  3. Заполните рабочий лист данными, включая заголовки в первой строке и записи в последующих строках.
  4. Вызовите метод Workbook.save, передав путь к файлу и SaveFormat.DBF в качестве параметров.

Следующий пример демонстрирует, как создать новый файл DBF с нуля. Он заполняет рабочий лист образцами данных, содержащими различные типы данных (строки, числа и даты), чтобы показать, как обрабатываются типы полей при экспорте в формат DBF.

from datetime import datetime

outputDir = r"C:\Output\\"
filePath = os.path.join(outputDir, "output.dbf")

if not os.path.exists(outputDir):
    os.makedirs(outputDir, exist_ok=True)

workbook = ac.Workbook()
worksheet = workbook.worksheets[0]
cells = worksheet.cells

# Заголовки столбцов
cells[0, 0].put_value("ID")
cells[0, 1].put_value("Name")
cells[0, 2].put_value("Department")
cells[0, 3].put_value("Salary")
cells[0, 4].put_value("HireDate")

# Строка данных 1
cells[1, 0].put_value(101)
cells[1, 1].put_value("John Smith")
cells[1, 2].put_value("Engineering")
cells[1, 3].put_value(75000.50)
cells[1, 4].put_value(datetime(2020, 3, 15))

# Строка данных 2
cells[2, 0].put_value(102)
cells[2, 1].put_value("Jane Doe")
cells[2, 2].put_value("Marketing")
cells[2, 3].put_value(68000.75)
cells[2, 4].put_value(datetime(2019, 7, 22))

# Строка данных 3
cells[3, 0].put_value(103)
cells[3, 1].put_value("Bob Johnson")
cells[3, 2].put_value("Finance")
cells[3, 3].put_value(82000.00)
cells[3, 4].put_value(datetime(2021, 1, 10))

# Строка данных 4
cells[4, 0].put_value(104)
cells[4, 1].put_value("Alice Brown")
cells[4, 2].put_value("Human Resources")
cells[4, 3].put_value(71000.25)
cells[4, 4].put_value(datetime(2018, 11, 5))

# Строка данных 5
cells[5, 0].put_value(105)
cells[5, 1].put_value("Charlie Wilson")
cells[5, 2].put_value("Operations")
cells[5, 3].put_value(79500.80)
cells[5, 4].put_value(datetime(2022, 5, 30))

# Установка ширины столбцов для лучшей читаемости
worksheet.cells.set_column_width(0, 8)
worksheet.cells.set_column_width(1, 20)
worksheet.cells.set_column_width(2, 20)
worksheet.cells.set_column_width(3, 12)
worksheet.cells.set_column_width(4, 14)

workbook.save(filePath, ac.SaveFormat.Dbf)

Рекомендации по типам данных и форматированию

При передаче данных между Aspose.Cells и форматом DBF важно понимать, как типы данных сопоставляются между двумя системами, для обеспечения целостности данных.

Типы ячеек и типы полей DBF

Значения ячеек Aspose.Cells автоматически преобразуются в соответствующие типы полей DBF при сохранении:

  • Строки сопоставляются с символьными (C) полями.
  • Числовые значения (целые числа и десятичные дроби) сопоставляются с числовыми (N) полями.
  • Значения дат сопоставляются с датовыми (D) полями в формате YYYYMMDD.
  • Логические значения сопоставляются с логическими (L) полями.

Кодировка

Файлы DBF могут использовать различные кодировки символов в зависимости от приложения, в котором они были созданы. Aspose.Cells обрабатывает кодировку прозрачно в большинстве случаев, но если у вас возникают проблемы с отображением символов, может потребоваться проверить кодировку исходного файла.

Правила для имён полей

Имена полей DBF должны соответствовать следующим правилам:

  • Максимальная длина — 10 символов.
  • Должны начинаться с буквы.
  • Не должны содержать пробелов или специальных символов.
  • Хранятся в верхнем регистре независимо от регистра, использованного при вводе.

Проверка результата

После записи файла DBF вы можете проверить результат, открыв его в Microsoft Excel или любом другом приложении, совместимом с dBASE. Данные должны отображаться в табличном виде с именами полей в качестве заголовков столбцов, а записи должны быть заполнены в соответствии с предоставленными вами данными.

Преобразование между DBF и другими форматами

Одним из наиболее практичных вариантов использования чтения и записи файлов DBF с помощью Aspose.Cells является преобразование данных между форматом DBF и современными форматами электронных таблиц, такими как XLSX, XLS или CSV. Поскольку Aspose.Cells поддерживает широкий спектр форматов, вы можете легко загрузить файл DBF и повторно сохранить его в любом другом поддерживаемом формате или наоборот.

Например, вы можете прочитать файл DBF, применить форматирование или вычисления с помощью API Aspose.Cells, а затем сохранить результат в виде файла XLSX для распространения среди пользователей, которые работают с современными приложениями для работы с электронными таблицами. И наоборот, вы можете взять данные из файла XLSX или CSV и экспортировать их в формат DBF для интеграции с устаревшими системами.