none
Cambiar Propiedades (Ancho) de celdas Excel RRS feed

  • Pregunta

  • Hola amigos, me gustaria a traves de una funcion que exporta unos datos a un archivo excel, dar formato a las celdas de dos columnas distintas, mas bien seria establecer un ancho fijo.
    Y ya si se pudiera establecer que el ancho de toda la columna de celdas fuese el ancho necesario para ver todos los caracteres de la columna seria perfecto, pero eso ya es mucho pedir creo yo. Para mi es suficiente con poder establecer un ancho fijo desde el codigo con alguna propiedad o algo.

     Tengo ahora mismo esta funcion :
     Private Sub PipeToExcel()

            Dim ApExcel = New Microsoft.Office.Interop.Excel.Application
            Dim Libro = ApExcel.Workbooks.Add

            Libro.Sheets(1).cells(1, 1) = "Code UK P/N"
            Libro.Sheets(1).cells(2, 1) = "Drawing"
            Libro.Sheets(1).cells(1, 2) = lblUK.Text
            Libro.Sheets(1).cells(2, 2) = lblDRW.Text
        
            SaveFileDialogProduct.DefaultExt = "*.xlsx"
            SaveFileDialogProduct.FileName = "Time Quotation  UK PN " & lblUK.Text & "  DRW PN " & lblDRW.Text
            SaveFileDialogProduct.Filter = "Archivos de Excel (*.xlsx)|*.xlsx"
            SaveFileDialogProduct.ShowDialog()
            Libro.SaveAs(SaveFileDialogProduct.FileName)
            ' MsgBox("Se ha creado el excel")

            ApExcel.Quit()
            Libro = Nothing
            ApExcel = Nothing

        End Sub

    MUCHAS GRACIAS POR LA AYUDA

    Nino

    martes, 9 de diciembre de 2014 14:42

Respuestas

  • Para establecer el ancho de una columna debes usar la propiedad ColumnWidth.

    Si por ejemplo quieres establecer el ancho de la columna C ejecuta esta instrucción:

    Columns("C:C").ColumnWidth = 20


    Saludos, Javier J

    • Marcado como respuesta Toni Thenig miércoles, 10 de diciembre de 2014 8:41
    martes, 9 de diciembre de 2014 17:00

Todas las respuestas

  • Para establecer el ancho de una columna debes usar la propiedad ColumnWidth.

    Si por ejemplo quieres establecer el ancho de la columna C ejecuta esta instrucción:

    Columns("C:C").ColumnWidth = 20


    Saludos, Javier J

    • Marcado como respuesta Toni Thenig miércoles, 10 de diciembre de 2014 8:41
    martes, 9 de diciembre de 2014 17:00
  • Para que se muestre el ancho de forma que se vean todos los caracteres, define un rango, por ejemplo:

    Dim aRange As Excel.Range
    aRange = Libro.Sheets(1).get_Range("A1", "E100");
    

    Y a continuación utiliza el autofit

    aRange.Columns.AutoFit();
    Un saludo


    Si se solucionó tu consulta, no olvides marcarla como respondida. Si te ayudó, vótala como útil.

    martes, 9 de diciembre de 2014 17:05
  • Hola Jose. Muchas gracias por tu respuesta. he hecho exactamente lo mismo y me dice que no puedo definir Excel.Range.QUiza necesite añadir alguna libreria aunque ya he añadido : 

    Imports System.Data.OleDb
    Imports System.Math
    Imports Microsoft.Office.Core
    Imports Microsoft.Office.Interop.Excel
    Imports System.Data

    Sin em bargo el Visual me sugiere cambiar "Excel.Range" por "Range", asi que lo he cambiado solo eso y ahora el error al ejecutar es este.

    "Excepción no controlada del tipo 'System.MissingMemberException' en Microsoft.VisualBasic.dll
    Información adicional: No se encuentra el miembro público 'get_Range' en el tipo 'Worksheet'."

    Sabes que es lo que puede ocurrir? Muchas gracias.



    Nino

    miércoles, 10 de diciembre de 2014 7:53
  • Puedes hacer

    Libro.Sheets(1).Cells.Select  ' para seleccionar todas las celdas

    Libro.Sheets(1).Selection.Columns.AutoFit  ' para autoajustarlas


    Saludos, Javier J

    miércoles, 10 de diciembre de 2014 8:04
  • Hola Javier, acabo de hacer eso mismo y me aparece este error

    Excepción no controlada del tipo 'System.MissingMemberException' en Microsoft.VisualBasic.dll
    Información adicional: No se encuentra el miembro público 'Selection' en el tipo 'Worksheet'.

    De todas formas por ahora lo tengo con el ancho fijo como me explicaste al principio que eso si me funciona. 

    Ahora el problema principal que tengo, mas que lo del autoajuste de las celdas, es que, todas las celdas se me quedan alineadas el texto de izquierda a derecha menos una, que se queda de dcha a izquierda. 
    No entiendo el por que, ya que en todas las celdas copio "labels" de mi interfaz de la misma manera por lo que no entiendo el motivo. 

    Creo que es CASI SEGURO por que cuando es un numero (215) me lo pone pegado a la derecha, pero si contiene caracteres(2-15) ó (1.25) ó (A789) si me los pone bien alineados a la izquierda). No entiendo el por que.

    Por lo que mi intencion principal ahora es buscar un comando que me alinee esa celda en excel y pueda ver todas las celdas con el texto "Pegado" a la izquierda, por que ahora queda bastante feo.

    Sabeis como sulucionar esto? Muchisimas gracias por toda la ayuda de verdad.


    Nino


    • Editado Toni Thenig miércoles, 10 de diciembre de 2014 8:52 correccion
    miércoles, 10 de diciembre de 2014 8:46
  • Buenas,

    Te dejo un ejemplo en el que se mezclan los conceptos de formateado de celdas.

    Dim namedRange1 As Microsoft.Office.Tools.Excel.NamedRange = Me.Controls.AddNamedRange(Me.Range("A1", "A5"), "namedRange1")
    
    namedRange1.NoteText("This is a Formatting test", missing, missing)
    namedRange1.Value2 = "Martha"
    namedRange1.Font.Name = "Verdana"
    namedRange1.VerticalAlignment = Excel.XlVAlign.xlVAlignCenter
    namedRange1.HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter
    namedRange1.BorderAround(missing, Excel.XlBorderWeight.xlThick, Excel.XlColorIndex.xlColorIndexAutomatic, missing)
    namedRange1.AutoFormat(Excel.XlRangeAutoFormat.xlRangeAutoFormat3DEffects1, True, False, True, False, True, _
    	True)
    
    If MessageBox.Show("Clear the formatting and notes?", "Test", MessageBoxButtons.YesNo) = DialogResult.Yes Then
    	namedRange1.ClearFormats()
    	namedRange1.ClearNotes()
    End If
    Un saludo.


    Si se solucionó tu consulta, no olvides marcarla como respondida. Si te ayudó, vótala como útil.

    miércoles, 10 de diciembre de 2014 8:59
  • No me funciona, me marca subraya en azul error en Microsoft.Office.Tools.Excel.NamedRange y cuando pongo el cursor encima me dice "El tipo 'Microsoft.Office.Tools.Excel.NamedRange' no está definido" 

    Tambien me marca como error los "missing" ya que dice que no están declarados, y puede que esten inaccesibles debido a su nivel de protección.

    Y los elementos "Excel.XlVAlign" "Excel.XlHAlign" , "Excel.XlBorderWeight" " Excel.XlColorIndex" y "Excel.XlRangeAutoFormat" me dice que "no es un miembro de excel"

    Es que nunca he utilizado estas herramientas y estoy un poco perdido quizá tenga que añadir algo mas o no se..


    Nino

    miércoles, 10 de diciembre de 2014 10:05
  • Asegúrate de que en tu proyecto tienes agregada la Microsoft.Office.Tools.Excel.dll y hace un import de la misma al inicio de la clase en la que estés utilizando

    Si se solucionó tu consulta, no olvides marcarla como respondida. Si te ayudó, vótala como útil.

    miércoles, 10 de diciembre de 2014 11:08
  • Si, he agregado la dll de Excel que me dices y he nombrado el Imports al inicio del formulario, pero aun me siguen saliendo errores.

    La verdad que no se que pasa. Me gustaria mas por ejemplo poder poner una celda de color en vez de el autoajuste de las celdas(ya que veo que no hay manera de conseguirlo)

    Es posible con alguna propiedad hacerlo? Por ejemplo el ancho de la celda lo establezco fijo en 70 de esta manera

    Libro.Sheets(1).cells(1, 2).ColumnWidth = 70

    Pero no encuentro ninguna prop para hacer referencia al color ahi

    Gracias


    Nino

    miércoles, 10 de diciembre de 2014 13:04