Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

omdc

Trabalhando com ficheiros Excel 2007

Recommended Posts

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 Class
O 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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.