in ASP.NET MVC, IIS, Microsoft .Net, Visual Studio

Formato vecchio o libreria di tipo non valido con PIAs

Un problema che si potrebbe incontrare durante l’utilizzo di oggetti Microsoft.Interop.Office.Excel e l’impossibilità di poter esportare file, blocco dovuto ad un particolare messaggio di errore:

Formato vecchio o libreria di tipo non valido. (Exception from HRESULT: 0×80028018 (TYPE_E_INVDATAREAD)).

Questo errore, all’interno di applicazioni web, è dovuto ad una differenza di Cultura tra la versione di Microsoft Office installata sul server (differente appunto da quella del web server stesso). La soluzione al problema è molto semplice, durante l’esecuzione di operazioni che richiamano oggetti Excel è necessario cambiare, sul web server, il contesto di esecuzione, impostando una cultura (definita principalmente dalla lingua stessa) uguale a quella della versione di Microsoft Office installata.

Per prima cosa apriamo il file web.config, posizioniamoci nella sezione appSettings e scriviamo:

<add key="CultureInfo" value="it-IT" />

Successivamente realizziamo una semplice classe che ci consente di applicare uno switch, istantaneamente, sulla lingua del Thread in esecuzione:

public class MsCultureSwitch : IDisposable
{
  public static string CultureInfoName
  {
      get { return ConfigurationManager.AppSettings["CultureInfo"]; }
  }
  
  private CultureInfo originalCulture = null;

  public MsCultureSwitch()
  {
    originalCulture = Thread.CurrentThread.CurrentCulture;
    Thread.CurrentThread.CurrentCulture = new CultureInfo(CultureInfoName);
  }

  public void Dispose()
  {
    Thread.CurrentThread.CurrentCulture = originalCulture;
  }
}

Infine possiamo utilizzare l’oggetto appena creato per eseguire codice con la libreria PIAs:

using(MsCultureSwitch msCulture = new MsCultureSwitch())
{
  // Here your PIAs Code!
}

Finito! Spero possa tornare utile anche a voi!

Scrivi un commento

Commento