Καλημέρα καλημέρα...
Στη προσπάθεια μου να γεμίσω ένα Excel file σε ένα Datatable 'τρώω' το Error: Old format or invalid type library. (Exception from HRESULT: 0x80028018 (TYPE_E_INVDATAREAD)) .
Χρησιμοποιώ MS Ofiice 2007 Αγγλικά και το Visual studio 2005.
Όταν το culture του υπολογιστή είναι ΕΝ-US τότε δεν υπάρχει κανένα προβλημα
Όταν όμως το culteure του υπολογιστή είναι στα ελληνικά το μου παρουσιάζεται το παραπάνω πρόβλημα ( την ώρα που θα χρησιμοποιηθέι η εντολή
while (Convert.ToString(((Microsoft.Office.Interop.Excel.Range)workSheet.Cells[r, c]).Value2).Trim() != "") ). Να σημειώσω και πάλι πως όταν τα culture των MS Office και του υπολογιστή είναι ίδια τότε ολα πάνε ρολόι!!!!!!!!!!
Για τον λόγο αυτό (αν δλδ τα culture είναι διαφορετικά) θα πρέπει να μετατρέψω το culture του υπολογιστή στο ίδιο culture με αυτό των MS Office:
System.Globalization.
CultureInfo oldCI = System.Threading.Thread.CurrentThread.CurrentCulture;
string lang_pc = oldCI.EnglishName;//to culture to ipologisti
app = new Microsoft.Office.Interop.Excel.ApplicationClass();
LanguageSettings langSettings = (LanguageSettings)app.LanguageSettings;
id_office = langSettings.get_LanguageID(
MsoAppLanguageID.msoLanguageIDUI);
CultureInfo lang_offi = CultureInfo.GetCultureInfo(id_office);
string lang_office = lang_offi.EnglishName;//to culture ton office
if (lang_office != lang_pc)
{
System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo(id_office);
}
(παρακάτω στο κώδικα μου ξαναμετατρέπω το culture του υπολογιστή στο παλιό του cultrure.....!!)
Αυτός ο κώδικας τρέχει μια χαρά αλλάζει το culture του υπολογιστή αλλά παίρνω το ίδιο πρόβλημα. Κάτι που παρατήρησα είναι πως όταν αλλάζω το culture του υπολογιστή μέσα από τα Windows XP, χρειάζεται μετά να κάνω restart το μηχάνημα. Οπότε υποθέτω πως αυτό εδώ System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo(id_office); , παρόλο που το αλλάζει και το βλέπω, αλλα δε το αλλάζει ουσιαστικά.
Έχει κανείς καμιά ιδεά??