omdc 0 Denunciar post Postado Outubro 17, 2007 Boa tarde, estou a desenvolver uma pequena aplicação em vb.net VS 2005 e pretendo aceder a um ficheiro excel 2007 (Tenho o Office 2007 instalado com a opção .Net Development Tools ). Posteriormente pretendo manipular esse mesmo ficheiro. Estou porém a ter problemas quando abro o ficheiro... Eis o meu codigo: Imports System.IOImports Microsoft.Office.InteropPublic Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim exlApp As Excel.Application = New Excel.Application() ' Se tiver a visivel é aberta a aplicacao EXCEL exlApp.Visible = False Dim exlBook As Excel.Workbook '= exlApp.Workbooks.Open("c:\\abc.xlsx") Dim exlSheet As Excel.Worksheet '= CType(exlBook.Worksheets(0), Excel.Worksheet) Try exlBook = exlApp.Workbooks.Add("c:\abc.xlsx") lblInfo.Text = "SUCESSO" Catch ex As Exception lblInfo.Text = ex.Message End Try End SubEnd ClassO erro que da na compilacao é: Old format or invalid type library. (Exception from HRESULT: 0x80028018 (TYPE_E_INVDATAREAD)) Tenho as seguintes livrarias instaladas: - Microsoft Office Core - Microsoft Office Interop Excel - Microsoft VisualStudio Tools Applications Runtime Help.... Estou a ficar desesperado Compartilhar este post Link para o post Compartilhar em outros sites
Gustavo Kana 0 Denunciar post Postado Março 5, 2008 Esse erro ocorre por causa do conflito da linguagem/cultura (culture), se você já resolveu, segue pra quem tiver o mesmo erro: Crie uma classe que armazene o atual culture e retorne após a thread: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Globalization; using System.Threading; namespace ConsoleApplication1 { class Change_CurrentCulture : IDisposable { private CultureInfo m_CurrentCulture; public void Set_CurrentCulture() { // salva formato atual e seta para en-US // save current culture and set culture to en-US m_CurrentCulture = Thread.CurrentThread.CurrentCulture; Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US"); } #region IDisposable Members public void Dispose() { // retorna formato default // return to normal culture Thread.CurrentThread.CurrentCulture = m_CurrentCulture; } #endregion } }Segue exemplo de como inserir na classe que gera/manipula o arq excel: using System; using System.Collections.Generic; using System.Linq; using System.Text; using Excel = Microsoft.Office.Interop.Excel; using System.Reflection; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { [b] Change_CurrentCulture MudaCode = new Change_CurrentCulture(); MudaCode.Set_CurrentCulture();[/b] string Path = @"c:\temp\modelo2.xls"; object _value = Missing.Value; // initialize the Excel Application class Excel.ApplicationClass app = new Excel.ApplicationClass(); // create the workbook object by opening the excel file. // Pega o arquivo do modelo de avaliação como template Excel.Workbook workBook = app.Workbooks.Open(Path, 0, true, 5, "", "", true, Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0); // get the active worksheet using sheet name or active sheet // Pega a primeira planilha do arquivo excel Excel.Worksheet workSheet = (Excel.Worksheet)workBook.ActiveSheet; int index = 0; // This row,column index should be changed as per your need. // i.e. which cell in the excel you are interesting to read. //object rowIndex = 2; object rowIndex = 16; object colIndex1 = 7; try { if (((Excel.Range)workSheet.Cells[rowIndex, colIndex1]).Value2 != null) { string seila = ((Excel.Range)workSheet.Cells[rowIndex, colIndex1]).Value2.ToString(); Console.WriteLine("Excel : {0}", seila); index++; } ((Excel.Range)workSheet.Cells[rowIndex, colIndex1]).set_Value(Missing.Value, "X"); ((Excel.Range)workSheet.Cells[22, 8]).set_Value(Missing.Value, "X"); workBook.SaveAs(@"C:\TEMP\teste.xls", _value, _value, _value, _value, _value, Excel.XlSaveAsAccessMode.xlNoChange, _value, _value, _value, _value, null); workBook.Close(false, _value, _value); app.Quit(); } catch (Exception ex) { app.Quit(); Console.WriteLine(ex.Message); } [b] MudaCode.Dispose();[/b] } } } Compartilhar este post Link para o post Compartilhar em outros sites