Press "Enter" to skip to content

Exception from HRESULT: 0x800A03EC – Scrivendo una formula in un foglio Excel da C#

Contesto:

Sto preparando un esportazione su foglio excel di dati letti da uno dei nostri software e la richiesta è stata di fare in modo che non vengano esportati solo i valori ma vengano esportati i dettagli in forma di valore e tutti i totalizzatori siano inseriti in excel come formule.

Problema:

Se scrivevo le formule in modalità base, ovvero  “=A1*B2/C3” tutto funzionava perfettamente, se invece inserivo una formula a volte funzionava altre volte no. In particolare la formula “ROUND” non funzionava per nulla.

Tentativi fatti:

Modificare i dati della formula in cento modi diversi, provare a creare il thread specifico dove vengono fatte le chiamate interop direttamente in Inglese visto che tradurre le formule in tutte le lingue sarebbe un po’ complicato.
Nulla cambiava  l’errore sulla formula ROUND,  mentre la formula SUM e la formula RAND funzionavano.

Colta da sommo sconforto e chiedendomi se ci fosse qualche gremlink nascosto nelle interop che tentava di farmi impazzire, ho deciso di provare a leggere la formula da un foglio esistente. Pertanto ho scritto su un foglio excel vuoto

A1 =ARROTONDA( A2*100/A3;2)

Quando ho letto il foglio excel da Interop ho scoperto che, creato un range RG sulla cella A1

range.Formula conteneva il seguente testo:  “=ROUND(A2*100/A3,2)”

Presumo che la leggera differenza sia evidente, infatti quando io inserivo la formula nell’oggetto Formula del Range scrivevo:

range.Formula = “=ROUND(A2*100/A3;2)”;

Perché assumevo che le formule Interop dovessero essere scritte come si scrivevano sul foglio di Excel.

Evidentemente erravo, quando si scrive una formula da Interop C# i parametri sono separati da virgola. Non ho fatto prove usando altre formule con più parametri, ma sono quasi certa che il tutto funzioni allo stesso modo.

Con questa, ne ho imparata una nuova su Office e sull’Interoperabilità con .NET. Spero che questo post aiuti qualcun’altro con lo stesso incomprensibile errore a capire che cosa fare.