excel报告生成中的问题

时间:2009-09-03 06:00:06

标签: vb.net excel

我正在处理Excel报告,我希望顶行为空以允许插入图像。但是,我不希望图像大小改变列的宽度,而是希望下面的数据可以做到这一点。

这是我到目前为止所做的:

   If ComDset.Tables(0).Rows.Count > 0 Then

    Try
        With Excel
            .SheetsInNewWorkbook = 1
            .Workbooks.Add()
            .Worksheets(1).Select()

            Dim i As Integer = 1
            For col = 0 To ComDset.Tables(0).Columns.Count - 1
                .cells(1, i).value = ComDset.Tables(0).Columns(col).ColumnName
                .cells(1, i).EntireRow.Font.Bold = True
                i += 1
            Next
            i = 2
            Dim k As Integer = 1
            For col = 0 To ComDset.Tables(0).Columns.Count - 1
                i = 2
                For row = 0 To ComDset.Tables(0).Rows.Count - 1
                    .Cells(i, k).Value = ComDset.Tables(0).Rows(row).ItemArray(col)
                    i += 1
                Next
                k += 1
            Next
            filename = "ShiftReport" & Format(MdbDate, "dd-MM-yyyy") & ".xls"
            .ActiveCell.Worksheet.SaveAs(filename)
        End With
        System.Runtime.InteropServices.Marshal.ReleaseComObject(Excel)
        Excel = Nothing
    Catch ex As Exception
        MsgBox(ex.Message)
    End Try

    ' The excel is created and opened for insert value. We most close this excel using this system
    Dim pro() As Process = System.Diagnostics.Process.GetProcessesByName("EXCEL")
    For Each i As Process In pro
        i.Kill()
    Next
End If

3 个答案:

答案 0 :(得分:1)

我建议尝试“合并”前两行中的单元格。您可以通过说K2来取A1并合并它们,图像在那里很合适......

Range("A1:K2").Select
Selection.Merge

答案 1 :(得分:0)

使用包含图像创建报告的一种方法是创建模板工作簿(.xlt文件),您已在其中设置了所需的格式和图像。然后在您的代码中,从模板创建新的报表工作簿,如下所示:

.Workbooks.Add("path\to\report_template.xlt")

要使图像大小固定且与列宽无关,请右键单击它,选择“格式化图片...”,打开“属性”选项卡,然后在“对象定位”中选择“不移动或使用单元格调整大小”

或者,使用代码将图片添加到空白工作簿中,如下所示:

ActiveSheet.Pictures.Insert( "path\to\image.jpg" ).Select
With Selection
    .Placement = xlFreeFloating
    .PrintObject = True
End With

您可以通过将行变量初始化为适当的值来控制用于输出数据的第一行。

您还可以使用AutoFit方法调整列大小以匹配您的数据。

您的代码可能如下所示:

 Try
    With Excel
        .SheetsInNewWorkbook = 1
        .Workbooks.Add("path\to\report_template.xlt")
        .Worksheets(1).Select()

        Dim outputRow As Integer = 8
        For col = 0 To ComDset.Tables(0).Columns.Count - 1
            .Cells(outputRow, col+1).value = ComDset.Tables(0).Columns(col).ColumnName
            .Cells(outputRow, col+1).EntireRow.Font.Bold = True
        Next

        outputRow += 1
        For y = 0 To ComDset.Tables(0).Rows.Count - 1
            For x = 0 To ComDset.Tables(0).Columns.Count - 1
                .Cells(outputRow + y, x).Value = ComDset.Tables(0).Rows(y).ItemArray(x)
            Next
        Next

        .Cells(outputRow, 1).CurrentRegion.Columns.AutoFit

        filename = "ShiftReport" & Format(MdbDate, "dd-MM-yyyy") & ".xls"
        .ActiveCell.Worksheet.SaveAs(filename)
    End With
    System.Runtime.InteropServices.Marshal.ReleaseComObject(Excel)
    Excel = Nothing
Catch ex As Exception
    MsgBox(ex.Message)
End Try

为outputRow变量选择合适的初始值,为图像提供足够的空间。

答案 2 :(得分:0)

如果只有打印报告需要图像,则可以考虑将其放入页眉。

Worksheets(1).PageSetup.LeftHeaderPicture.Filename = "C:\header.JPG"

图像将嵌入文件中。它仅在“打印预览”模式下以及打印报告时可见。