【问题标题】:Change excel column width using StreamWriter使用 StreamWriter 更改 excel 列宽
【发布时间】:2018-09-17 19:47:28
【问题描述】:

我需要有关此代码的帮助。

我正在编写代码以使用StreamWriter 将数据表数据导出到 Excel 工作表,一切都很好,但我想更改 excel 中每一列的 excel 列宽度,我只能更改宽度一次用于所有列。

这是列宽的代码:

.WriteLine("  <Column ss:Width=""100""/>")

有没有办法改变列 (0) 宽度 = 20 和列 (1) 宽度 = 18 等等 ? 还是让它自动适应??

谢谢。

这是我的代码:

Imports System.IO
Public Class ExportToExcelClr
Public Sub ExportToExcel(datatable As DataTable, GV As DataGridView, filename As String, Optional OpenDialog As Boolean = False, Optional SameColumnsWidth As Boolean = True)
    Dim FlNm As String = ""
    Dim sv As New SaveFileDialog
    sv.FileName = filename
    sv.Filter = "|*.xls"
    If sv.ShowDialog <> DialogResult.OK Then Exit Sub
    FlNm = sv.FileName
    Dim fs As New StreamWriter(FlNm, False)
    With fs
        .WriteLine("<?xml version=""1.0""?>")
        .WriteLine("<?mso-application progid=""Excel.Sheet""?>")
        .WriteLine("<Workbook xmlns=""urn:schemas-microsoft-com:office:spreadsheet"">")
        .WriteLine("  <Styles>")
        .WriteLine("  <Style ss:ID=""hdr"">")
        .WriteLine("  <Alignment ss:Horizontal=""Center""/>")
        .WriteLine("  <Borders>")
        .WriteLine("    <Border ss:Position=""Left"" ss:LineStyle=""Continuous"" ss:Weight=""1""/>")
        .WriteLine("    <Border ss:Position=""Right"" ss:LineStyle=""Continuous"" ss:Weight=""1""/>")
        .WriteLine("    <Border ss:Position=""Top"" ss:LineStyle=""Continuous"" ss:Weight=""1""/>")
        .WriteLine("  </Borders>")
        .WriteLine("  <Font ss:FontName=""Droid Arabic Kufi"" ss:Size=""8"" ss:Bold=""1""/>") 'SET FONT
        .WriteLine("  </Style>")
        .WriteLine("  <Style ss:ID=""ksg"">")
        .WriteLine("  <Alignment ss:Vertical=""Bottom""/>")
        .WriteLine("  <Borders/>")
        .WriteLine("  <Font ss:FontName=""Arial""/>") 'SET FONT
        .WriteLine("  </Style>")
        .WriteLine("  <Style ss:ID=""isi"">")
        .WriteLine("  <Borders>")
        .WriteLine("    <Border ss:Position=""Bottom"" ss:LineStyle=""Continuous"" ss:Weight=""1""/>")
        .WriteLine("    <Border ss:Position=""Left"" ss:LineStyle=""Continuous"" ss:Weight=""1""/>")
        .WriteLine("    <Border ss:Position=""Right"" ss:LineStyle=""Continuous"" ss:Weight=""1""/>")
        .WriteLine("    <Border ss:Position=""Top"" ss:LineStyle=""Continuous"" ss:Weight=""1""/>")
        .WriteLine("  </Borders>")
        .WriteLine("  <Font ss:FontName=""Arial"" ss:Size=""11""/>")
        .WriteLine("  </Style>")
        .WriteLine("  </Styles>")
        .WriteLine("  <Worksheet ss:Name=""sheet1"">")
        .WriteLine("  <Table>")


        'If SameColumnsWidth Then
        'For i = 0 To GV.ColumnCount - 1
        .WriteLine("  <Column ss:Width=""100""/>")
            'Next
            'End If

            .WriteLine("  <Row ss:StyleID=""ksg"">")

        For i As Integer = 0 To GV.ColumnCount - 1
            Application.DoEvents()
            .WriteLine("  <Cell ss:StyleID=""hdr"">")
            .WriteLine("    <Data ss:Type=""String"">{0}</Data>", GV.Columns.Item(i).HeaderText)
            .WriteLine("  </Cell>")
        Next


        .WriteLine("  </Row>")
        For intRow As Integer = 0 To datatable.Rows.Count - 1
            Application.DoEvents()
            .WriteLine("  <Row ss:StyleID=""ksg"" ss:utoFitHeight =""0"">")
            For intCol As Integer = 0 To datatable.Columns.Count - 1
                Application.DoEvents()
                .WriteLine("  <Cell ss:StyleID=""isi"">")
                .WriteLine("  <Data ss:Type=""String"">{0}</Data>", GV.Item(intCol, intRow).Value.ToString)
                .WriteLine("  </Cell>")
            Next
            .WriteLine("  </Row>")
        Next
        .WriteLine("  </Table>")
        .WriteLine("  </Worksheet>")
        .WriteLine("</Workbook>")
        .Close()
        If OpenDialog Then
            Dim msg1
            msg1 = MsgBox("تم الاستخراج ... هل تريد فتح الملف ؟", MsgBoxStyle.YesNo + MsgBoxStyle.Question, "Export")
            If msg1 = vbNo Then Exit Sub
            Process.Start(FlNm)
        End If
    End With
End Sub
Sub DataGridView_COLORE_FOR_ME(ByVal DataGridViewXT As Object)
    Try
        '-------------------------------------------------------------------------------------------
        DataGridViewXT.DefaultCellStyle.BackColor = Color.FromArgb(255, 255, 255)
        DataGridViewXT.AlternatingRowsDefaultCellStyle.BackColor = Color.FromArgb(255, 255, 192)
        '-------------------------------------------------------------------------------------------
    Catch ex As Exception
        MsgBox(ex.Message, MsgBoxStyle.Critical + MsgBoxStyle.MsgBoxRight + MsgBoxStyle.MsgBoxRtlReading, "Error")
    End Try
End Sub
End Class 

【问题讨论】:

    标签: excel vb.net


    【解决方案1】:

    如果此属性 (AutoFitWidth) 指定为 True ("1"),则意味着此列应仅针对数字和日期值自动调整大小。我们不会自动调整文本值。

    如果 ss:Width 和 ss:AutoFitWidth 同时存在,则行为如下:

    ss:AutoFitWidth="1" and ss:Width is unspecified: Autofit the column width to fit the content.
    ss:AutoFitWidth="1" and ss:Width is specified: Set the column to the specified width and only autofit if the size of the content is larger than the specified width.
    ss:AutoFitWidth="0" and ss:Width is unspecified: Use the default column width.
    ss:AutoFitWidth="0" and ss:Width is specified: Use the specified width.
    

    取自这里: https://www.codeproject.com/Questions/789892/How-to-set-autosize-the-cell-of-excell-sheet-when

    因此,您的线路将从:

    .WriteLine("  <Column ss:Width=""100""/>")
    

    到任一

    .WriteLine("  <Column ss:AutoFitWidth=""1"" ss:Width=""20""/>")
    

    .WriteLine("  <Column ss:AutoFitWidth=""1""/>")
    

    这些列在输出文件中按顺序排列,因此您可以将它们放入:

    .WriteLine("  <Column ss:Width=""8""/>")
    .WriteLine("  <Column ss:Width=""16""/>")
    .WriteLine("  <Column ss:Width=""24""/>")
    .WriteLine("  <Column ss:Width=""11""/>")
    

    For i As Integer = 0 To GV.ColumnCount - 1
        .WriteLine("  <Column ss:AutoFitWidth=""1""/>")
    Next
    

    我会先在 Excel 中创建您想要的文件。将其保存为 XML 并在 Google Chrome 或 IE 中查看 XML。这将向您展示 xml 的外观。

    【讨论】:

    • @Rabeea qabaha 我的回答对你有帮助吗?
    猜你喜欢
    • 2014-06-01
    • 2017-03-02
    • 2021-05-03
    • 2013-12-17
    • 1970-01-01
    • 2013-02-08
    • 2013-05-10
    • 2015-03-12
    • 1970-01-01
    相关资源
    最近更新 更多