Lettura e scrittura di file DBF
Introduzione
DBF (DataBase File) è un formato di file di database legacy introdotto originariamente da dBASE nei primi anni ‘80. Nonostante l’età del formato, i file DBF sono ancora ampiamente utilizzati in molti settori per l’archiviazione di dati strutturati, in particolare in contabilità, GIS e altre applicazioni specializzate. Aspose.Cells consente di integrare questi file legacy nei moderni flussi di lavoro dei fogli di calcolo Java in modo trasparente.
La libreria supporta sia la lettura che la scrittura di file DBF, offrendo la possibilità di:
- Importare dati da file DBF esistenti in oggetti Workbook di Aspose.Cells per ulteriori elaborazioni o conversioni in altri formati.
- Creare nuovi file DBF da zero o trasformando dati provenienti da altri formati di fogli di calcolo.
- Mantenere le definizioni dei campi, i tipi di dati e le strutture dei record durante il trasferimento dei dati in entrata e in uscita dal formato DBF.
I file DBF possono anche essere aperti direttamente in Microsoft Excel e in altre applicazioni di fogli di calcolo, rendendoli un comodo ponte tra i sistemi legacy e gli strumenti moderni per fogli di calcolo.
Versioni DBF supportate e funzionalità
Aspose.Cells supporta le seguenti versioni del formato DBF:
- dBASE III — La variante originale e più ampiamente supportata del formato DBF.
- dBASE IV — Una versione estesa che supporta tipi di dati aggiuntivi e dimensioni di campo maggiori.
Funzionalità supportate
La libreria fornisce un supporto completo per le seguenti operazioni:
- Lettura dei dati DBF in un oggetto Workbook, con tutti i record e le definizioni dei campi preservati.
- Scrittura dei dati della cartella di lavoro nel formato DBF per l’esportazione verso applicazioni compatibili con dBASE.
- Gestione dei tipi di dati comuni utilizzati nei file DBF, inclusi campi di tipo carattere, numerico, data e logico.
- Conservazione delle definizioni dei campi come nome, tipo e lunghezza del campo durante le operazioni di lettura/scrittura.
Limitazioni e considerazioni
Quando si lavora con file DBF, tenere presenti le seguenti limitazioni:
- Il numero massimo di campi per file è 128.
- La dimensione massima del record è 4000 byte.
- I nomi dei campi sono limitati a 10 caratteri, devono essere in maiuscolo e non possono contenere spazi.
- I valori di data nei file DBF sono memorizzati nel formato
YYYYMMDD. - La codifica dei caratteri può variare a seconda dell’applicazione di origine (comunemente Windows-1252 o tabelle codici OEM).
Lettura di un file DBF
Aspose.Cells rende semplice il caricamento dei dati da un file DBF in un oggetto Workbook. La libreria utilizza la classe LoadOptions per specificare il formato di origine, garantendo che i dati vengano interpretati correttamente durante il processo di caricamento.
Lettura di un file DBF con Aspose.Cells
Per leggere un file DBF, è necessario creare un’istanza di LoadOptions, impostare la sua proprietà LoadFormat su LoadFormat.Dbf e passarla al costruttore Workbook insieme al percorso del file. Una volta caricati, i dati diventano accessibili tramite la raccolta getWorksheets(), dove è possibile scorrere le celle, estrarre i valori o manipolare i dati secondo necessità.
L’esempio seguente mostra come caricare un file DBF esistente in Aspose.Cells, accedere al suo primo foglio di lavoro e leggere i valori delle celle.
import com.aspose.cells.*;
import java.io.File;
String dataDir = "Data/";
String filePath = new File(new File(dataDir), "example.dbf").getPath();
LoadOptions loadOptions = new LoadOptions(LoadFormat.DBF);
Workbook workbook = new Workbook(filePath, loadOptions);
Worksheet worksheet = workbook.getWorksheets().get(0);
Cells cells = worksheet.getCells();
StringBuilder sb = new StringBuilder();
int maxRow = cells.getMaxDataRow();
int maxCol = cells.getMaxDataColumn();
for (int i = 0; i <= maxRow; i++)
{
for (int j = 0; j <= maxCol; j++)
{
Cell cell = cells.get(i, j);
String value = cell.getStringValue();
sb.append("|").append(value);
}
sb.append("|").append(System.lineSeparator());
}
System.out.println(sb.toString());
String outputPath = new File(new File(dataDir), "output.xlsx").getPath();
workbook.save(outputPath, SaveFormat.XLSX);
System.out.println("DBF file loaded successfully. Converted XLSX saved at: " + outputPath);
Scrittura di un file DBF
La scrittura di dati in un file DBF segue un pattern simile al salvataggio di qualsiasi altro formato di foglio di calcolo con Aspose.Cells. Si crea o si carica un Workbook, si popola il foglio di lavoro con i dati e poi si chiama il metodo save specificando SaveFormat.Dbf come formato di destinazione.
Scrittura di un file DBF con Aspose.Cells
Per creare un file DBF, seguire questi passaggi:
- Creare una nuova istanza di
Workbook. - Accedere al primo foglio di lavoro dalla raccolta
getWorksheets(). - Popolare il foglio di lavoro con i propri dati, includendo le intestazioni nella prima riga e i record nelle righe successive.
- Chiamare il metodo
Workbook.save, passando il percorso del file eSaveFormat.Dbfcome parametri.
L’esempio seguente mostra come creare un nuovo file DBF da zero. Popola un foglio di lavoro con dati di esempio contenenti diversi tipi di dati (stringhe, numeri e date) per illustrare come i tipi di campo vengono gestiti durante l’esportazione nel formato DBF.
import com.aspose.cells.*;
import java.io.File;
import java.util.GregorianCalendar;
String outputDir = "C:\\Output\\";
String filePath = new File(new File(outputDir), "output.dbf").getPath();
if (!new File(outputDir).exists())
{
new File(outputDir).mkdirs();
}
Workbook workbook = new Workbook();
Worksheet worksheet = workbook.getWorksheets().get(0);
Cells cells = worksheet.getCells();
// Intestazioni delle colonne
cells.get(0, 0).putValue("ID");
cells.get(0, 1).putValue("Name");
cells.get(0, 2).putValue("Department");
cells.get(0, 3).putValue("Salary");
cells.get(0, 4).putValue("HireDate");
// Riga di dati 1
cells.get(1, 0).putValue(101);
cells.get(1, 1).putValue("John Smith");
cells.get(1, 2).putValue("Engineering");
cells.get(1, 3).putValue(75000.50);
cells.get(1, 4).putValue(new GregorianCalendar(2020, 2, 15).getTime());
// Riga di dati 2
cells.get(2, 0).putValue(102);
cells.get(2, 1).putValue("Jane Doe");
cells.get(2, 2).putValue("Marketing");
cells.get(2, 3).putValue(68000.75);
cells.get(2, 4).putValue(new GregorianCalendar(2019, 6, 22).getTime());
// Riga di dati 3
cells.get(3, 0).putValue(103);
cells.get(3, 1).putValue("Bob Johnson");
cells.get(3, 2).putValue("Finance");
cells.get(3, 3).putValue(82000.00);
cells.get(3, 4).putValue(new GregorianCalendar(2021, 0, 10).getTime());
// Riga di dati 4
cells.get(4, 0).putValue(104);
cells.get(4, 1).putValue("Alice Brown");
cells.get(4, 2).putValue("Human Resources");
cells.get(4, 3).putValue(71000.25);
cells.get(4, 4).putValue(new GregorianCalendar(2018, 10, 5).getTime());
// Riga di dati 5
cells.get(5, 0).putValue(105);
cells.get(5, 1).putValue("Charlie Wilson");
cells.get(5, 2).putValue("Operations");
cells.get(5, 3).putValue(79500.80);
cells.get(5, 4).putValue(new GregorianCalendar(2022, 4, 30).getTime());
// Imposta la larghezza delle colonne per una migliore leggibilità
worksheet.getCells().setColumnWidth(0, 8);
worksheet.getCells().setColumnWidth(1, 20);
worksheet.getCells().setColumnWidth(2, 20);
worksheet.getCells().setColumnWidth(3, 12);
worksheet.getCells().setColumnWidth(4, 14);
workbook.save(filePath, SaveFormat.DBF);
Considerazioni sui tipi di dati e sulla formattazione
Quando si trasferiscono dati tra Aspose.Cells e il formato DBF, è importante comprendere come i tipi di dati vengono mappati tra i due sistemi per garantire l’integrità dei dati.
Tipi di cella in tipi di campo DBF
I valori delle celle di Aspose.Cells vengono convertiti automaticamente nei tipi di campo DBF appropriati durante il salvataggio:
- Le stringhe vengono mappate in campi di tipo carattere (C).
- I valori numerici (interi e decimali) vengono mappati in campi numerici (N).
- I valori di data vengono mappati in campi di data (D) nel formato
YYYYMMDD. - I valori booleani vengono mappati in campi logici (L).
Codifica
I file DBF possono utilizzare diverse codifiche di caratteri a seconda dell’applicazione che li ha creati. Aspose.Cells gestisce la codifica in modo trasparente nella maggior parte dei casi, ma se si riscontrano problemi di visualizzazione dei caratteri, potrebbe essere necessario verificare la codifica del file di origine.
Regole per i nomi dei campi
I nomi dei campi DBF devono rispettare le seguenti regole:
- Lunghezza massima di 10 caratteri.
- Devono iniziare con una lettera.
- Non possono contenere spazi o caratteri speciali.
- Vengono memorizzati in maiuscolo indipendentemente dalle maiuscole/minuscole utilizzate in input.
Verifica dell’output
Dopo aver scritto un file DBF, è possibile verificare il risultato aprendolo in Microsoft Excel o in qualsiasi applicazione compatibile con dBASE. I dati dovrebbero apparire in un layout tabellare con i nomi dei campi come intestazioni di colonna e i record popolati in base ai dati forniti.
Conversione tra DBF e altri formati
Uno dei casi d’uso più pratici per la lettura e la scrittura di file DBF con Aspose.Cells è la conversione dei dati tra il formato DBF e i formati di fogli di calcolo moderni come XLSX, XLS o CSV. Poiché Aspose.Cells supporta un’ampia gamma di formati, è possibile caricare facilmente un file DBF e salvarlo in qualsiasi altro formato supportato, o viceversa.
Ad esempio, è possibile leggere un file DBF, applicare formattazioni o calcoli utilizzando l’API di Aspose.Cells e quindi salvare il risultato come file XLSX per la distribuzione agli utenti che lavorano con applicazioni di fogli di calcolo moderne. Al contrario, è possibile prendere dati da un file XLSX o CSV ed esportarli in formato DBF per l’integrazione con sistemi legacy.