Gentile Stefano,
La migrazione di un progetto da .NET Framework a .NET 8 può presentare alcune sfide, specialmente quando si tratta di utilizzare componenti COM come Office Interop. Ecco alcune possibili soluzioni e alternative che potresti considerare:
- Utilizzo di Office Interop in .NET 8
L'utilizzo di Office Interop in .NET 8 richiede alcuni passaggi aggiuntivi rispetto a .NET Framework, poiché la gestione di COM è leggermente diversa.
Passaggi per configurare Office Interop in .NET 8:
- Installazione dei pacchetti NuGet: Assicurati di aver installato i pacchetti NuGet necessari:
dotnet add package Microsoft.Office.Interop.Excel
- Configurazione del progetto: Aggiungi il seguente codice al tuo file
.csproj
per assicurarti che il progetto sia configurato correttamente per utilizzare COM:<PropertyGroup> <EnableComHosting>true</EnableComHosting> </PropertyGroup>
- Codice per l'utilizzo di Interop: Verifica che il codice sia correttamente implementato. Ecco un esempio semplice per aprire un file Excel:
using Excel = Microsoft.Office.Interop.Excel; public void OpenExcelFile(string filePath) { Excel.Application excelApp = new Excel.Application(); Excel.Workbook workbook = excelApp.Workbooks.Open(filePath); Excel.Worksheet worksheet = workbook.Sheets[1] as Excel.Worksheet; // Esegui operazioni sul foglio di lavoro workbook.Close(false); excelApp.Quit(); System.Runtime.InteropServices.Marshal.ReleaseComObject(worksheet); System.Runtime.InteropServices.Marshal.ReleaseComObject(workbook); System.Runtime.InteropServices.Marshal.ReleaseComObject(excelApp); }
- Alternative a Office Interop
Se non riesci a risolvere i problemi con Office Interop, puoi considerare alternative come OpenXML o altre librerie di terze parti. Sebbene tu abbia menzionato alcuni problemi con OpenXML e SpreadsheetLight, è possibile che ci siano soluzioni a questi problemi.
Utilizzo di OpenXML:
OpenXML è una libreria molto potente per lavorare con i documenti di Office senza la necessità di installare Office sul server.
Ecco un esempio per leggere i contenuti delle celle (incluso il calcolo delle formule):
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Spreadsheet;
public void ReadExcelFile(string filePath)
{
using (SpreadsheetDocument document = SpreadsheetDocument.Open(filePath, false))
{
WorkbookPart workbookPart = document.WorkbookPart;
Sheet sheet = workbookPart.Workbook.Descendants<Sheet>().FirstOrDefault();
WorksheetPart worksheetPart = (WorksheetPart)workbookPart.GetPartById(sheet.Id);
SheetData sheetData = worksheetPart.Worksheet.Elements<SheetData>().First();
foreach (Row row in sheetData.Elements<Row>())
{
foreach (Cell cell in row.Elements<Cell>())
{
string cellValue = GetCellValue(cell, workbookPart);
Console.WriteLine(cellValue);
}
}
}
}
private string GetCellValue(Cell cell, WorkbookPart workbookPart)
{
string value = cell.InnerText;
if (cell.DataType != null)
{
switch (cell.DataType.Value)
{
case CellValues.SharedString:
var stringTable = workbookPart.GetPartsOfType<SharedStringTablePart>().FirstOrDefault();
value = stringTable.SharedStringTable.ElementAt(int.Parse(value)).InnerText;
break;
case CellValues.Boolean:
value = value == "0" ? "FALSE" : "TRUE";
break;
}
}
return value;
}
- Utilizzo di altre librerie di terze parti
Se SpreadsheetLight non funziona come previsto, puoi provare altre librerie come:
- EPPlus: Una libreria molto popolare e facile da usare per leggere e scrivere file Excel.
- ClosedXML: Un'altra ottima libreria per lavorare con file Excel.
Ecco un esempio di utilizzo di EPPlus:
using OfficeOpenXml;
public void ReadExcelFileWithEPPlus(string filePath)
{
using (var package = new ExcelPackage(new FileInfo(filePath)))
{
ExcelWorksheet worksheet = package.Workbook.Worksheets[0];
for (int row = 1; row <= worksheet.Dimension.End.Row; row++)
{
for (int col = 1; col <= worksheet.Dimension.End.Column; col++)
{
var cellValue = worksheet.Cells[row, col].Text;
Console.WriteLine(cellValue);
}
}
}
}
Conclusione
Prova a seguire uno dei metodi sopra descritti e vedi se riesci a risolvere i tuoi problemi. Se continui ad avere difficoltà, potrebbe essere utile verificare l'ambiente di sviluppo e le configurazioni di sistema per assicurarti che tutto sia impostato correttamente per l'utilizzo di COM in .NET 8.
Spero di esserti stata utile.
Buona giornata!
Monica.