Visual Basic.NET - ¿Cómo busco en un rango de celdas Excel desde .net?

 
Vista:
sin imagen de perfil
Val: 229
Ha disminuido 1 puesto en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

¿Cómo busco en un rango de celdas Excel desde .net?

Publicado por José Vicente (113 intervenciones) el 19/09/2020 09:34:11
Hola de nuevo, tengo una aplicación de vb.net que crea una hoja excel, mi problema es que no sé como puedo dar formato condicional (cambiar color al texto) a un rango de celdas según sea su valor. Además, también necesito fijar la primera fila para que al imprimir el Excel me la muestre en todas las hojas. ¿Puede alguien decirme como lo puedo hacer?.Gracias. Saludos.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

¿Cómo busco en un rango de celdas Excel desde .net?

Publicado por Phil Rob (1546 intervenciones) el 19/09/2020 11:56:06
Hola,

Cuando tienes un Excel.Application en VB.Net, ejecutes el mismo codigo que utilizarias en VBA XLS (como en Macro, pro ejemplo).

Ejemplo :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
mports Excel = Microsoft.Office.Interop.Excel
Imports Microsoft.Vbe.Interop
 
Public Class FBase
 
    Dim WithEvents XLSAPP As Excel.Application = Nothing   ' Para tener los eventos de Excel, por ejemplo : WorkbookBeforeSave
 
  ' En un procedimiento cuando no Execel es activado
  ' ... ... ...
        XLSAPP = New Excel.Application
        XLSAPP.Visible = True
        XLSAPP.Workbooks.Open("D:\Tmp\ProbExcel\Test.xls")
        XLSAPP.Sheets("Hoja1").Select()
 
        XLSAPP.Range("B12").Select()
 
        MessageBox.Show(XLSAPP.ActiveCell.Value)
 
 ' ... ... ...
 
        XLSAPP.Columns("B:B").Select()  ' "B:B" para toda la columna B, ...
        XLSAPP.Selection.Find(UnaTextBox.Text).Select()  ' UnaTextBox contiene el numero buscado
 
 ' ... ... ...
        Dim IndicioDeColumna As Integer = XLSAPP.ActiveCell.Column
        Dim IndicioDeLinea As Integer = XLSAPP.ActiveCell.Row
 
        ' ... ... ...
 
        ' Este es posible de programar en VB este haceremos en un Macro XLS
        XLSAPP.Range("C4").Select()
        XLSAPP.ActiveCell.FormulaR1C1 = "127"
        XLSAPP.Sheets.Add()
        XLSAPP.Range("Feuil2!C4").Select()
        XLSAPP.ActiveCell.Value = "951127"
 
        ' Tambien es posible de ejecutar un Macro que es en XLS
        XLSAPP.Run("UnaMacro")   ' Macro sin parámetro
        XLSAPP.Run("OtraMacro", "Hola ...")   ' Macro con un parámetro
 
 
' Escribir el format de una celda
    With Selection.Font
        .Name = "Calibri"
        .FontStyle = "Normal"
        .Size = 11
        .Strikethrough = False
        .Superscript = False
        .Subscript = False
        .OutlineFont = False
        .Shadow = False
        .Underline = xlUnderlineStyleNone
        .Color = 255
        .TintAndShade = 0
        .ThemeFont = xlThemeFontMinor
    End With
    With Selection.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .Color = 65535
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With
' ...

Para conocer los códigos necesarios, el mas fácil es de grabar un Macro en XLS y la abrir para leer su código.

Espero que este te ayudará.

Très bonne journée ...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 229
Ha disminuido 1 puesto en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

¿Cómo busco en un rango de celdas Excel desde .net?

Publicado por José Vicente (113 intervenciones) el 19/09/2020 12:23:17
Salut, egalement pour toi mon ami.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 229
Ha disminuido 1 puesto en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

¿Cómo busco en un rango de celdas Excel desde .net?

Publicado por José Vicente (113 intervenciones) el 19/09/2020 13:00:02
Hola, te paso mi código, no consigo hacer que las celdas tengan el texto con formato condicional. Echame una mano STP.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
Function DataGridAExcel(ByVal MiGrid As DataGridView) As Boolean
 
    Dim exApp As New Microsoft.Office.Interop.Excel.Application
    Dim exLibro As Microsoft.Office.Interop.Excel.Workbook
    Dim exHoja As Microsoft.Office.Interop.Excel.Worksheet
 
 
    Try
 
        'AÑADIMOS EL LIBRO AL PROGRAMA Y LA HOJA AL LIBRO
 
        exLibro = exApp.Workbooks.Add
        exHoja = exLibro.Worksheets.Add()
 
        'CONTAMOS COLUMNAS Y FILAS
 
        Dim NCol As Integer = MiGrid.ColumnCount
        Dim NRow As Integer = MiGrid.RowCount
 
        'RECORREMOS TODAS LAS FILAS Y POR CADA COLUMNA ESCRIBIMOS
 
        For i As Integer = 1 To NCol
 
            exHoja.Cells.Item(1, i) = MiGrid.Columns(i - 1).Name.ToString
 
        Next
 
        For Fila As Integer = 0 To NRow - 1
 
            For Col As Integer = 0 To NCol - 1
 
                exHoja.Cells.Item(Fila + 2, Col + 1) = MiGrid.Rows(Fila).Cells(Col).Value
 
            Next
 
        Next
 
        'TÍTULO EN NEGRITA, ALINEADO AL CENTRO DE LAS CELDAS Y COLOR
 
        Dim objRango As Excel.Range = exHoja.Range(exHoja.Cells(1, 1), exHoja.Cells(exHoja.UsedRange.Rows.Count, exHoja.UsedRange.Columns.Count))
        Dim contador As Integer = exHoja.Rows.Count
 
        exHoja.Name = "HISTÓRICO TENSIÓN"
        exHoja.Rows.Item(1).Font.Bold = 1
        exHoja.Rows.Item(1).Font.ColorIndex = 5
        exHoja.Rows.Item(1).HorizontalAlignment = 3 'ALINEADO DEL ENCABEZADO
 
        objRango.HorizontalAlignment = 3 'ALINEADO DE LAS COLUMNAS
 
        exHoja.Range("A1").Value = "   FECHA   "
        exHoja.Range("B1").Value = "  SISTÓLICA  "
        exHoja.Range("C1").Value = "  DIASTÓLICA  "
        exHoja.Range("D1").Value = "  PULSACIONES  "
        exHoja.Range("E1").Value = "  SATURACIÓN  "
 
        objRango.Borders.LineStyle = 1 'BORDES DE LA HOJA
 
        exHoja.Rows.Font.Size = 12 ' TAMAÑO DE LA FUENTE
        exHoja.Rows.Font.Name = "Adobe Garamond Pro Bold" 'TIPO DE FUENTE
        exHoja.Columns.AutoFit() 'AJUSTE DE LAS COLUMNAS
        exHoja.Range("A2:A1048576").Font.ColorIndex = 9 'COLOR DE LA FUENTE
 
                'AQUÍ ES DONDE INTENTO DARLE EL FORMATO CONDICIONAL.
 
For Fila As Integer = 1 To NRow - 1
 
            For Col As Integer = 1 To NCol - 1
 
                If exHoja.ActiveCell.Value > 13 Or exHoja.ActiveCell.Value < 6 Then
 
                    exHoja.selection.Font.ColorIndex = 3
 
                End If
 
            Next
 
        Next
 
        'COMPROBAMOS SI EXISTE EL FICHERO Y SOBRESCRIBIMOS SI ES ASÍ
 
        Dim Message As String = "¿QUIERES GUARDAR LA HOJA EXCEL? "
        Dim Caption As String = "OPCIÓN DE GUARDAR"
        Dim Buttons As MessageBoxButtons = MessageBoxButtons.YesNo
 
        Dim Result As DialogResult
 
        'Mostramos el MessageBox
 
        Result = MessageBox.Show(Message, Caption, Buttons)
 
        exApp.ActiveWindow.WindowState = Excel.XlWindowState.xlMaximized
 
        'RESULTADO DE LA OPCIÓN AFIRMATIVA
 
        If Result = System.Windows.Forms.DialogResult.Yes Then
 
            If System.IO.File.Exists(archivo) = True Then
 
                System.IO.File.Delete(archivo)
                exLibro.SaveAs(archivo)
 
 
            Else
 
                exLibro.SaveAs(archivo)
 
            End If
 
        Else
 
            System.IO.File.OpenRead(archivo)
 
        End If
 
        'APLICACIÓN VISIBLE
 
        exApp.Application.Visible = True
 
        exHoja = Nothing
        exLibro = Nothing
        exApp = Nothing
 
    Catch ex As Exception
 
        MessageBox.Show(ex.Message, "ERROR AL EXPORTAR A EXCEL", MessageBoxButtons.OK, MessageBoxIcon.Error)
 
        Return False
 
    End Try
 
    Return True
 
End Function
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

¿Cómo busco en un rango de celdas Excel desde .net?

Publicado por Phil Rob (1546 intervenciones) el 19/09/2020 14:08:23
Por favor, pruebas este codigo :

1
2
3
4
5
6
7
8
9
10
11
For Fila As Integer = 1 To NRow - 1
    For Col As Integer = 1 To NCol - 1   ' Columna estan A, B, C, ... ==> A = CHR(64 + COL)
        Dim FC As String = Chr(64 + Col) & Fila
    '       MessageBox.Show(FC)
        exHoja.Range(FC).Select()
            If exHoja.ActiveCell.Value > 13 Or exHoja.ActiveCell.Value < 6 Then
                '         exHoja.selection.Font.ColorIndex = 3   ' ColorIndex = 3 no da me un color ...
            exHoja.Selection.Font.Color = 255  ' verifica el color, 255 es mi prueba : Color = 255 es rojo.
        End If
    Next
Next

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 229
Ha disminuido 1 puesto en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

¿Cómo busco en un rango de celdas Excel desde .net?

Publicado por José Vicente (113 intervenciones) el 19/09/2020 17:34:55
Hola de nuevo, me da error y no lo entiendo. Je suis desolé
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

¿Cómo busco en un rango de celdas Excel desde .net?

Publicado por Phil Rob (1546 intervenciones) el 19/09/2020 17:58:22
No comprendo pero ActiveCell es utilizada en tu código y en mi prueba, este funciona.
Gustaría saber el numéro de la linea de código que da el error.

Este seria bien de verificar si el programa funciona con los códigos "Color" en comentario (pregunto me si XLS existe a este momento) :

1
2
3
4
5
6
7
8
9
10
11
' For Fila As Integer = 1 To NRow - 1
'            For Col As Integer = 1 To NCol - 1   ' Columna estan A, B, C, ... ==> A = CHR(64 + COL)
'                Dim FC As String = Chr(64 + Col) & Fila
         '       MessageBox.Show(FC)
 '               exHoja.Range(FC).Select()
'                 If exHoja.ActiveCell.Value > 13 Or exHoja.ActiveCell.Value < 6 Then
                      '         exHoja.selection.Font.ColorIndex = 3   ' ColorIndex = 3 no da me un color ...
'                    exHoja.Selection.Font.Color = 255  ' verifica el color, 255 es mi prueba : Color = 255 es rojo.
'                End If
'            Next
'        Next

Si el erro es en estas lineas, envia me el proyecto. Miraré mas tarde o mañana. Si error es en otro lugar, no es un problema de formato de una Celda ...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 229
Ha disminuido 1 puesto en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

¿Cómo busco en un rango de celdas Excel desde .net?

Publicado por José Vicente (113 intervenciones) el 19/09/2020 18:24:34
Hola, aquí tienes mi proyecto. No sé porqué me da ese error, no lo entiendo. No me había dado problemas esa función. No sé, es muy raro. Espero no causarte muchos problemas. Salutations de Valence. Bon weekend mon ami
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

¿Cómo busco en un rango de celdas Excel desde .net?

Publicado por Phil Rob (1546 intervenciones) el 19/09/2020 22:43:08
Hola,

Este el código que he utilizado :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
Function DataGridAExcel(ByVal MiGrid As DataGridView) As Boolean
 
    Dim exApp As New Microsoft.Office.Interop.Excel.Application
    Dim exLibro As Microsoft.Office.Interop.Excel.Workbook
    Dim exHoja As Microsoft.Office.Interop.Excel.Worksheet
 
    Try
 
        'AÑADIMOS EL LIBRO AL PROGRAMA Y LA HOJA AL LIBRO
 
        exLibro = exApp.Workbooks.Add()
        '    exHoja = exLibro.Worksheets.Add()
        exHoja = exApp.Sheets(1)
 
        'CONTAMOS COLUMNAS Y FILAS
 
        Dim NCol As Integer = 5  ' !!!!!!!!!!! MiGrid.ColumnCount   '= 5 para pruebas
        Dim NRow As Integer = 5  ' !!!!!!!!!!! MiGrid.RowCount   '= 5 para pruebas
 
        'RECORREMOS TODAS LAS FILAS Y POR CADA COLUMNA ESCRIBIMOS
 
        For i As Integer = 1 To NCol
 
            exHoja.Cells.Item(1, i) = MiGrid.Columns(i - 1).Name.ToString
 
        Next
 
        For Fila As Integer = 0 To NRow - 1
 
            For Col As Integer = 0 To NCol - 1
 
                exHoja.Cells.Item(Fila + 2, Col + 1) = MiGrid.Rows(Fila).Cells(Col).Value
 
            Next
 
        Next
 
        'TÍTULO EN NEGRITA, ALINEADO AL CENTRO DE LAS CELDAS Y COLOR
 
        Dim objRango As Excel.Range = exHoja.Range(exHoja.Cells(1, 1), exHoja.Cells(exHoja.UsedRange.Rows.Count, exHoja.UsedRange.Columns.Count))
        Dim contador As Integer = exHoja.Rows.Count
 
        exHoja.Name = "HISTÓRICO TENSIÓN"
        exHoja.Rows.Item(1).Font.Bold = 1
        exHoja.Rows.Item(1).Font.ColorIndex = 5
        exHoja.Rows.Item(1).HorizontalAlignment = 3 'ALINEADO DEL ENCABEZADO
 
        objRango.HorizontalAlignment = 3 'ALINEADO DE LAS COLUMNAS
 
        exHoja.Range("A1").Value = "   FECHA   "
        exHoja.Range("B1").Value = "  SISTÓLICA  "
        exHoja.Range("C1").Value = "  DIASTÓLICA  "
        exHoja.Range("D1").Value = "  PULSACIONES  "
        exHoja.Range("E1").Value = "  SATURACIÓN  "
 
        objRango.Borders.LineStyle = 1 'BORDES DE LA HOJA
 
        exHoja.Rows.Font.Size = 12 ' TAMAÑO DE LA FUENTE
        exHoja.Rows.Font.Name = "Adobe Garamond Pro Bold" 'TIPO DE FUENTE
        exHoja.Columns.AutoFit() 'AJUSTE DE LAS COLUMNAS
        exHoja.Range("A2:A1048576").Font.ColorIndex = 9 'COLOR DE LA FUENTE
 
        For Fila As Integer = 2 To NRow - 1
 
            For Col As Integer = 2 To NCol - 1   ' Columna estan A, B, C, ... ==> A = CHR(64 + COL)
 
                Dim FC As String = Chr(64 + Col) & Fila
 
                exHoja.Range(FC).Select()
 
                '    If exHoja.Range(FC) ActiveCell.Value > 13 Or exHoja.ActiveCell.Value < 6 Then
                If exHoja.Range(FC).Value > 13 Or exHoja.Range(FC).Value < 6 Then
 
                    exHoja.Range(FC).Font.Color = 255 'Index = 3
 
                End If
 
            Next
 
        Next
 
        'COMPROBAMOS SI EXISTE EL FICHERO Y SOBRESCRIBIMOS SI ES ASÍ
 
        Dim Message As String = "¿QUIERES GUARDAR LA HOJA EXCEL? "
        Dim Caption As String = "OPCIÓN DE GUARDAR"
        Dim Buttons As MessageBoxButtons = MessageBoxButtons.YesNo
 
        Dim Result As DialogResult
 
        'Mostramos el MessageBox
 
        Result = MessageBox.Show(Message, Caption, Buttons)
 
        exApp.ActiveWindow.WindowState = Excel.XlWindowState.xlMaximized
 
        'RESULTADO DE LA OPCIÓN AFIRMATIVA
 
        If Result = System.Windows.Forms.DialogResult.Yes Then
 
            If System.IO.File.Exists(archivo) = True Then
 
                System.IO.File.Delete(archivo)
                exLibro.SaveAs(archivo)
 
            Else
 
                exLibro.SaveAs(archivo)
 
            End If
 
        Else
 
            System.IO.File.OpenRead(archivo)
 
        End If
 
        'APLICACIÓN VISIBLE
 
        exApp.Application.Visible = True
 
        exHoja = Nothing
        '        exLibro = Nothing
        exApp = Nothing
 
    Catch ex As Exception
 
        MessageBox.Show(ex.Message, "ERROR AL EXPORTAR A EXCEL", MessageBoxButtons.OK, MessageBoxIcon.Error)
 
        Return False
 
    End Try
 
    Return True
 
End Function

El programa es difícil para testar por que no conozco los valores usuales y si la DB es vacía, nada funciona. En los códigos escritos en el evento Load del Form, algunos errores vienen ... he puesto estos códigos en comentarios para funcionar hasta los códigos para XLS.

En este codigo para XLS, he cambiado los valores NCol y NRow para poder testar. ActiveCell no funciona en tu sistema pero Range(FC).Value funciona. Para hacer visible, he utilizado el color 255.

En todo caso, este problema es solucionar.

Bon week-end à toi aussi ...

JoseMDB
JoseXKS
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 229
Ha disminuido 1 puesto en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

¿Cómo busco en un rango de celdas Excel desde .net?

Publicado por José Vicente (113 intervenciones) el 20/09/2020 06:20:35
Merci beaucoup mon ami, GRANDE!!
Ahora sólo me queda ajustarlo un poco, tengo una duda todavía, ¿Cómo puedo dejar la primera fila del Excel para todas las hojas igual?
Sería como el encabezado de todas las hojas. Gracias me has ayudado muchísimo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 229
Ha disminuido 1 puesto en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

¿Cómo busco en un rango de celdas Excel desde .net?

Publicado por José Vicente (113 intervenciones) el 20/09/2020 06:52:05
Además, no entiendo:
1
Dim FC As String = Chr(64 + Col) & Fila
, pues se deja las dos últimas filas sin formatear. ¿Puedes explicármelo? Gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

¿Cómo busco en un rango de celdas Excel desde .net?

Publicado por Phil Rob (1546 intervenciones) el 20/09/2020 09:02:11
Hola José,

Para hacer todas hojas de misma manera, puedes hacer una cicla For Hoja = 1 To NHoja ... (como has hecho con columans y filas).

Dim FC As String = Chr(64 + Col) & Fila : la identificación de una celda se hace con la letra de la columna y el cifro de la linea.
Una cicla como For Col = 1 To NCol da 1, 2, 3, 4, ... pero es necesario de tener A, B, C, D, ...
CHR(X) da el caractere que tiene el codigo ASCII n°X = CHR(65) ==> A, CHR(66) ==> B, ...
Este por que, CHR(64 + Col) ==> A cuando Col = 1, CHR(64 + Col) ==> B cuando Col = 2, ...
Y CHR(64 + Col) & Fila ==> B4 cuando Col = 2 y Fila = 4.

Les 2 ultimas filas estan sin formatear por que :
he escrito (para mis pruebas) : NCol = 5 y NRow = 5 (ver lineas 17 y 18 en el codigo de mi ultimo mensaje de ayer)
las ciclas para formatear estan (ver lineas 62 y 65) :
For Fila = 2 To NRow - 1
For Col = 2 To NCol - 1

Explico :
For Fila = 2 To NRow - 1 :
Fila 1 están los títulos, no formato necesario, comenzó a 2.
Fila NRow-1 (=4) es un error por que las filas a formatear estan 2, 3, 4, 5 y 6. Fila 5 y 6 no formateadas.
For Col = 2 To NCol - 1
Col 1 están las fechas y la condición que tiene una comparación con un numérico es un error, comenzó a 2 (Col. B).
Col NCol-1 (=4) es un error por que las columnas a formatear estan 2 (=B), 3 (=C), 4 (=D) y 5 (=E). Col E no formateada.

Para corregir estos problemas :
tienes que poner las buen valores iniciales para NCol y NRow.
tienes que ajustar las ciclas con :
For Fila = 2 To NRow + 1
For Col = 2 To NCol

He reflexionado a este problema. Por que no utilizas un fichero XLS inicial (par ejemplo Inicial.xlsx) con todos los formatos (textos, celdas, títulos, ...) que es copiado y llenar cada vez que debes escribir datos ?
En este caso, tienes menos códigos para crear el fichero con los datos. Si tengo un poco tiempo en la tarde, haré un ejemplo para dar los mismos resultados que tu programa.

Bon dimanche,

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 229
Ha disminuido 1 puesto en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

¿Cómo busco en un rango de celdas Excel desde .net?

Publicado por José Vicente (113 intervenciones) el 20/09/2020 09:42:59
Hola de nuevo, ya corregí lo de las últimas líneas era, como tu dices cuestión de los índices del For (me he dado cuenta después de enviarte la anterior consulta, pero lo que yo quería decir al respecto de la primera fila, es que cuando imprimes un Excel de más de una página, si no fijas la primera fila, todas las hojas excepto la primera salen sin encabezado, eso es lo que yo queria decir, fijar la primera fila a modo de encabezado para todas las páginas que se impriman.

Bon j'espere que vous avez un bon dimanche aussi. Merci beaucoup pour votre temps et patience.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

¿Cómo busco en un rango de celdas Excel desde .net?

Publicado por Phil Rob (1546 intervenciones) el 20/09/2020 11:23:28
Comprendo ...
" cuando imprimes un Excel de más de una página, si no fijas la primera fila, todas las hojas excepto la primera salen sin encabezado, eso es lo que yo queria decir, fijar la primera fila a modo de encabezado para todas las páginas que se impriman "

Tienes que ajustar los parámetros Excel para conservar los títulos en cada pagina imprimida.
Pero este muy difícil para programación VB. Este es la razón porque propongo de hacer una pagina XLS inicial con todos los ajustados hechos.

Intento hacer un ejemplo en la tarde. Veras mucho meno código XLS dentro el código VB.

Hasta pronto
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 229
Ha disminuido 1 puesto en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

¿Cómo busco en un rango de celdas Excel desde .net?

Publicado por José Vicente (113 intervenciones) el 20/09/2020 11:34:00
Gracias. A bientôt.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

¿Cómo busco en un rango de celdas Excel desde .net?

Publicado por Phil Rob (1546 intervenciones) el 20/09/2020 18:06:40
Hola José,

He tenido un poco tiempo y me he divertido …

He agregada un Form2 en tu proyecto para contener mis códigos.
El objeto es de hacer todos los formatos con Excel y obtener un fichero inicial.
Con VB, hago un duplico de este fichero con nombre cambiado y lleno este nuevo fichero con los datos.

Mira los videos siguientes.

Para hacer el fichero inicial con los formatos (y las filas a imprimir a cada pagina) :
https://www.dropbox.com/s/j5m77ccuppz2ihl/CrearXLS_Inicial.mp4?dl=0

Para ejecutar mis códigos y obtener el fichero con los datos :
https://www.dropbox.com/s/o9g8gl73w9zjkas/ProgramaPasarXLS.mp4?dl=0

Adjunto el proyecto. No olvida de cambiar los ConnectionString por que estas estan diferente en tu PC.

Cuidado, en esta version, solo Form2 funciona bien.

Espero te dar una buena idea …

Très bonne soirée
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 229
Ha disminuido 1 puesto en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

¿Cómo busco en un rango de celdas Excel desde .net?

Publicado por José Vicente (113 intervenciones) el 20/09/2020 18:25:12
Hola, no sabía que me habías contestado, lo he solucionado, he conseguido que en todas las hojas aparezca la primera fila.
El código me ha quedado:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
Function DataGridAExcel(ByVal MiGrid As DataGridView) As Boolean
 
    Try
 
        'AÑADIMOS EL LIBRO AL PROGRAMA Y LA HOJA AL LIBRO
 
        exLibro = exApp.Workbooks.Add
        exHoja = exApp.Sheets(1)
 
        'CONTAMOS COLUMNAS Y FILAS
 
        Dim NCol As Integer = MiGrid.ColumnCount
        Dim NRow As Integer = MiGrid.RowCount
 
        'RECORREMOS TODAS LAS FILAS Y POR CADA COLUMNA ESCRIBIMOS
 
        For i As Integer = 1 To NCol
 
            exHoja.Cells.Item(1, i) = MiGrid.Columns(i - 1).Name.ToString
 
        Next
 
        For Fila As Integer = 0 To NRow - 1
 
            For Col As Integer = 0 To NCol - 1
 
                exHoja.Cells.Item(Fila + 2, Col + 1) = MiGrid.Rows(Fila).Cells(Col).Value
 
            Next
 
        Next
 
        Dim M_Izq As Integer = 63
        Dim M_Der As Integer = 43
        Dim M_Sup As Integer = 10
        Dim M_Inf As Integer = 10
 
        'ORIENTACIÓN DE LA HOJA
 
        With exHoja.PageSetup
 
            .Orientation = Excel.XlPageOrientation.xlPortrait
 
            'CONFIGURACIÓN DE MÁRGENES
 
            .LeftMargin = M_Izq
 
            .RightMargin = M_Der
 
            .TopMargin = M_Sup
 
            .BottomMargin = M_Inf
 
        End With
 
        'TÍTULO EN NEGRITA, ALINEADO AL CENTRO DE LAS CELDAS Y COLOR
 
        Dim objRango As Excel.Range = exHoja.Range(exHoja.Cells(1, 1), exHoja.Cells(exHoja.UsedRange.Rows.Count, exHoja.UsedRange.Columns.Count))
        Dim contador As Integer = exHoja.Rows.Count
        exHoja.PageSetup.PrintTitleRows = exHoja.Rows(1).Address 'PONEMOS LA FILA DE ENCABEZADO EN TODAS LAS HOJAS IMPRESAS
        exHoja.PageSetup.PaperSize = Excel.XlPaperSize.xlPaperA4 'TAMAÑO DE PAPEL A4
        exHoja.Name = "HISTÓRICO TENSIÓN"
        exHoja.Rows.Item(1).Font.Bold = 1 'NEGRITA
        exHoja.Rows.Item(1).Font.ColorIndex = 49 'COLOR DEL ENCABEZADO
        exHoja.Rows.Item(1).HorizontalAlignment = 3 'ALINEADO DEL ENCABEZADO
 
        objRango.HorizontalAlignment = 3 'ALINEADO DE LAS COLUMNAS
 
        exHoja.Range("A1").Value = "   FECHA   "
        exHoja.Range("B1").Value = "  SISTÓLICA  "
        exHoja.Range("C1").Value = "  DIASTÓLICA  "
        exHoja.Range("D1").Value = "  PULSACIONES  "
        exHoja.Range("E1").Value = "  SATURACIÓN  "
 
        objRango.Borders.LineStyle = 1 'BORDES DE LA HOJA
 
        exHoja.Rows.Font.Size = 12 ' TAMAÑO DE LA FUENTE
        exHoja.Rows.Font.Name = "Adobe Garamond Pro Bold" 'TIPO DE FUENTE
        exHoja.Columns.AutoFit() 'AJUSTE DE LAS COLUMNAS
 
        exHoja.Range("A2:A1048576").Font.ColorIndex = 9 'COLOR DE LA FUENTE DE LA COLUMNA DE FECHAS
 
        'DAMOS FORMATO CONDICIONAL DE LAS CELDAS
 
        For Fila As Integer = 2 To NRow + 1
 
            For Col As Integer = 2 To NCol
 
                Dim FC As String = Chr(64 + Col) & Fila
 
                exHoja.Range(FC).Select()
                exHoja.Range(FC).Font.ColorIndex = 32
                exHoja.Range(FC).Font.Bold = True
 
            Next
 
        Next
 
        For Fila As Integer = 2 To NRow + 1
 
            For Col As Integer = 2 To NCol - 3
 
                Dim FC As String = Chr(64 + Col) & Fila
 
                exHoja.Range(FC).Select()
 
                If exHoja.Range(FC).Value >= 13 Or exHoja.Range(FC).Value <= 11 Then
 
                    exHoja.Range(FC).Font.ColorIndex = 3
                    exHoja.Range(FC).Font.Bold = True
 
                End If
 
            Next
 
        Next
 
        For Fila As Integer = 2 To NRow + 1
 
            For Col As Integer = 3 To NCol - 2
 
                Dim FC As String = Chr(64 + Col) & Fila
 
                exHoja.Range(FC).Select()
 
                If exHoja.Range(FC).Value <= 5.5 Or exHoja.Range(FC).Value >= 7.5 Then
 
                    exHoja.Range(FC).Font.ColorIndex = 3
                    exHoja.Range(FC).Font.Bold = True
 
                End If
 
            Next
 
        Next
 
        For Fila As Integer = 2 To NRow + 1
 
            For Col As Integer = 4 To NCol - 1
 
                Dim FC As String = Chr(64 + Col) & Fila
 
                exHoja.Range(FC).Select()
 
                If exHoja.Range(FC).Value <= 59 Or exHoja.Range(FC).Value >= 80 Then
 
                    exHoja.Range(FC).Font.ColorIndex = 3
                    exHoja.Range(FC).Font.Bold = True
 
                End If
 
            Next
 
        Next
 
        For Fila As Integer = 2 To NRow + 1
 
            For Col As Integer = 5 To NCol
 
                Dim FC As String = Chr(64 + Col) & Fila
 
                exHoja.Range(FC).Select()
 
                If exHoja.Range(FC).Value <= 90 Then
 
                    exHoja.Range(FC).Font.ColorIndex = 3
                    exHoja.Range(FC).Font.Bold = True
 
                End If
 
            Next
 
        Next
 
        'COMPROBAMOS SI EXISTE EL FICHERO Y LO SOBRESCRIBIMOS SI ES ASÍ
 
        Dim Message As String = "¿QUIERES GUARDAR LA HOJA EXCEL? "
        Dim Caption As String = "OPCIÓN DE GUARDAR"
        Dim Buttons As MessageBoxButtons = MessageBoxButtons.YesNo
 
        Dim Result As DialogResult
 
        'Mostramos el MessageBox
 
        Result = MessageBox.Show(Message, Caption, Buttons)
 
        exApp.ActiveWindow.WindowState = Excel.XlWindowState.xlMaximized
 
        'RESULTADO DE LA OPCIÓN AFIRMATIVA
 
        If Result = System.Windows.Forms.DialogResult.Yes Then
 
            If System.IO.File.Exists(archivo) = True Then
 
                System.IO.File.Delete(archivo)
                exLibro.SaveAs(archivo)
 
            Else
 
                exLibro.SaveAs(archivo)
 
            End If
 
        Else
 
            System.IO.File.OpenRead(archivo)
 
        End If
 
        'APLICACIÓN VISIBLE
 
        exApp.Application.Visible = True
 
        exHoja = Nothing
        exLibro = Nothing
        exApp = Nothing
 
    Catch ex As Exception
 
        MessageBox.Show(ex.Message, "ERROR AL EXPORTAR A EXCEL", MessageBoxButtons.OK, MessageBoxIcon.Error)
 
        Return False
 
    End Try
 
    Return True
 
End Function
De todas formas muchísimas gracias por tu ayuda / interés. A bientôt mon ami.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar