Ayuda con propiedad ExcelLocale1033Attribute

22/11/2007 - 10:08 por Ivan Garcia Filin | Informe spam
Tengo un problema con la comunicación entre una aplicacion de Visual
Basic.net y una hoja de Excel que me realiza cálculos. Resulta que cuando voy
a cargar un valor en un rango de celdas, con esta instruccion:

oSheet.Range(columna & Str(j)).Resize(4, col).Value = DataArray
(Donde j y col son valores para configurar el inicio y tamaño del rango)

El problema es que obtengo una excepción de este tipo: Message="Excepción
de HRESULT: 0x800A03EC"

Investigando por ahi, parece ser que puede dar este problema por la
cofiguracion de region, y una posible solucion seria establecer la propiedad
ExcelLocale1033Attribute.Value()=False
(segun la KB de MS).

Pero esto es imposible, porque la propiedad de Value es ReadOnly. ¿Hay
alguna otra manera de solventar esto? ¿Conoceis este error y podeis darme una
solución?

Gracias por adelantado, un saludo ^^
Hikaru monono subetega ougentowa kaginarai.

Preguntas similare

Leer las respuestas

#1 Juan M
22/11/2007 - 22:09 | Informe spam
Hola Ivan,

No he sido capaz de reproducir el error que te aparece. Si puedes poner algo
más de código para hacer las pruebas...

Un saludo,
Juan

"Ivan Garcia "Filin"" escribió
Tengo un problema con la comunicación entre una aplicacion de Visual
Basic.net y una hoja de Excel que me realiza cálculos. Resulta que cuando
voy
a cargar un valor en un rango de celdas, con esta instruccion:

oSheet.Range(columna & Str(j)).Resize(4, col).Value = DataArray
(Donde j y col son valores para configurar el inicio y tamaño del rango)

El problema es que obtengo una excepción de este tipo: Message="Excepción
de HRESULT: 0x800A03EC"

Investigando por ahi, parece ser que puede dar este problema por la
cofiguracion de region, y una posible solucion seria establecer la
propiedad
ExcelLocale1033Attribute.Value()=False
(segun la KB de MS).

Pero esto es imposible, porque la propiedad de Value es ReadOnly. ¿Hay
alguna otra manera de solventar esto? ¿Conoceis este error y podeis darme
una
solución?

Gracias por adelantado, un saludo ^^
Hikaru monono subetega ougentowa kaginarai.
Respuesta Responder a este mensaje
#2 Ivan Garcia Filin
23/11/2007 - 08:31 | Informe spam
Aqui te pongo todo el código relacionado:
Imports Microsoft.Office.Interop

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button2.Click
'Declaracion de variables
Dim i, j, valor1, col, contador_hoja As Integer
Dim oExcel As New Excel.Application
Dim oBook2 As Excel._Workbook
Dim oSheet As Excel._Worksheet
oBook2 = oExcel.Workbooks.Open("ruta de fichero")

'Una variable de control para la hoja, digamos que relleno
'los valores en la hoja, pero hay cuatro posibles lugares
'donde colocar esos valores.
If control = 0 Then
control = 1
Else
control += 1
End If

'Tomo valores de textbox que le aparecen al usuario
'la variable col toma los valores 5, 3 o 2, cualquiera es valido
Dim DataArray(0 To ((4 * col) - 1)) As Object
i = 0
For Each ctrl In Panel2.Controls
If TypeOf (ctrl) Is MaskedTextBox Then
If ctrl.Text <> "" Then
DataArray(i) = Int(ctrl.Text)
i += 1
End If
End If
Next

'me muevo siempre a la ultima de las páginas del libro
'por caracteristicas del fichero
oSheet = oBook2.Worksheets(oExcel.Sheets.Count())
'aqui es donde creo que deberia modificar la propiedad de
Excellocale1033Attribute
columna = "H"
n = 0

'llamo a la seleccion de casos que hace control
Select Case control
Case 1
'el tamaño de la propiedad resize y el del DataArray siempre
coinciden
j = 5
oSheet.Range(columna & Str(j)).Resize(4, col).Value =
DataArray
Case 2
j = 17
oSheet.Range(columna & Str(j)).Resize(4, col).Value =
DataArray
Case 3
j = 29
oSheet.Range(columna & Str(j)).Resize(4, col).Value =
DataArray
Case 4
j = 41
oSheet.Range(columna & Str(j)).Resize(4, col).Value =
DataArray
Case 5
'añado una hoja mas en caso de que siga habiendo valores y
hayamos rellenado los posibles espacios
contador_hoja = oExcel.Sheets.Count() + 1
oExcel.ActiveWorkbook.Sheets.Add("Hoja" & Str(contador_hoja
- 1), "Hoja" & Str(contador_hoja), , )
control = 0
End Select

'Guardar y salir de Excel
oBook2.SaveAs("C:\Book1.xls")
oExcel.Quit()
End sub()

Gracias por la ayuda y el interés que has puesto, Juan.
Hikaru monono subetega ougentowa kaginarai.


"Juan M" wrote:

Hola Ivan,

No he sido capaz de reproducir el error que te aparece. Si puedes poner algo
más de código para hacer las pruebas...

Un saludo,
Juan
Respuesta Responder a este mensaje
#3 Juan M
23/11/2007 - 23:19 | Informe spam
Hola Iván,

A mi no me salta el error.

He cambiado alguna que otra cosa a ver si así evitamos el error

Esta línea con

oSheet = oBook2.Worksheets(oExcel.Sheets.Count())



con la opción Option Strict On no te deja ejecutarla.
la he cambiado por:

oSheet = CType(oBook2.Worksheets(oExcel.Sheets.Count(),Excel.Worksheet)

El Array

Dim DataArray(0 To ((4 * col) - 1)) As Object

si va a contener enteros es mejor declararlo como Integer
Con Option Strict On no te deja hacer la conversión directa de un Integer a
un Object

DataArray(i) = Int(ctrl.Text)



La siguiente instruccion la puedes cambiar por

oSheet.Range(columna & Str(j)).Resize(4, col).Value = DataArray



oSheet.Range(columna & j.ToString).Resize(4,col).Value=DataArray

En fin, no se si con esto se arreglarán las cosas, a mi no me salta el
error, y lo que he encontrado del error no me ha parecido aplicable al caso.

Lamento no ser de más ayuda.

Un saludo,
Juan

"Ivan Garcia "Filin"" escribió
Aqui te pongo todo el código relacionado:
Imports Microsoft.Office.Interop

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button2.Click
'Declaracion de variables
Dim i, j, valor1, col, contador_hoja As Integer
Dim oExcel As New Excel.Application
Dim oBook2 As Excel._Workbook
Dim oSheet As Excel._Worksheet
oBook2 = oExcel.Workbooks.Open("ruta de fichero")

'Una variable de control para la hoja, digamos que relleno
'los valores en la hoja, pero hay cuatro posibles lugares
'donde colocar esos valores.
If control = 0 Then
control = 1
Else
control += 1
End If

'Tomo valores de textbox que le aparecen al usuario
'la variable col toma los valores 5, 3 o 2, cualquiera es valido
Dim DataArray(0 To ((4 * col) - 1)) As Object
i = 0
For Each ctrl In Panel2.Controls
If TypeOf (ctrl) Is MaskedTextBox Then
If ctrl.Text <> "" Then
DataArray(i) = Int(ctrl.Text)
i += 1
End If
End If
Next

'me muevo siempre a la ultima de las páginas del libro
'por caracteristicas del fichero
oSheet = oBook2.Worksheets(oExcel.Sheets.Count())
'aqui es donde creo que deberia modificar la propiedad de
Excellocale1033Attribute
columna = "H"
n = 0

'llamo a la seleccion de casos que hace control
Select Case control
Case 1
'el tamaño de la propiedad resize y el del DataArray
siempre
coinciden
j = 5
oSheet.Range(columna & Str(j)).Resize(4, col).Value > DataArray
Case 2
j = 17
oSheet.Range(columna & Str(j)).Resize(4, col).Value > DataArray
Case 3
j = 29
oSheet.Range(columna & Str(j)).Resize(4, col).Value > DataArray
Case 4
j = 41
oSheet.Range(columna & Str(j)).Resize(4, col).Value > DataArray
Case 5
'añado una hoja mas en caso de que siga habiendo valores y
hayamos rellenado los posibles espacios
contador_hoja = oExcel.Sheets.Count() + 1
oExcel.ActiveWorkbook.Sheets.Add("Hoja" & Str(contador_hoja
- 1), "Hoja" & Str(contador_hoja), , )
control = 0
End Select

'Guardar y salir de Excel
oBook2.SaveAs("C:\Book1.xls")
oExcel.Quit()
End sub()

Gracias por la ayuda y el interés que has puesto, Juan.
Hikaru monono subetega ougentowa kaginarai.


"Juan M" wrote:

Hola Ivan,

No he sido capaz de reproducir el error que te aparece. Si puedes poner
algo
más de código para hacer las pruebas...

Un saludo,
Juan



email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida