Vb.net excel报表生成中的问题
我正在处理Excel报告,我希望顶部的行为空,以便插入图像。但是,我不希望图像大小改变列的宽度,而是希望下面的数据可以这样做 这就是我到目前为止所做的:Vb.net excel报表生成中的问题,vb.net,excel,Vb.net,Excel,我正在处理Excel报告,我希望顶部的行为空,以便插入图像。但是,我不希望图像大小改变列的宽度,而是希望下面的数据可以这样做 这就是我到目前为止所做的: If ComDset.Tables(0).Rows.Count > 0 Then Try With Excel .SheetsInNewWorkbook = 1 .Workbooks.Add() .Worksheets(1).Selec
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
我建议尝试“合并”前两行中的单元格。你可以从A1到K2,然后把它们合并在一起,这样图像就可以很好地放进去了
Range("A1:K2").Select
Selection.Merge
创建包含图像的报告的一种方法是创建一个模板工作簿(.xlt文件),您已经在其中设置了所需的格式和图像。然后,在代码中,根据模板创建新的报告工作簿,如下所示:
.Workbooks.Add("path\to\report_template.xlt")
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
要使图像大小固定且不受列宽影响,请右键单击图像,选择“设置图片格式…”,打开“属性”选项卡,然后在“对象定位”中选择“不移动或使用单元格调整大小”
或者,使用代码将图片添加到空白工作簿,如下所示:
ActiveSheet.Pictures.Insert( "path\to\image.jpg" ).Select
With Selection
.Placement = xlFreeFloating
.PrintObject = True
End With
通过将行变量初始化为适当的值,可以控制用于输出数据的第一行
您还可以使用自动调整方法调整列大小以匹配数据
然后,您的代码可能如下所示:
.Workbooks.Add("path\to\report_template.xlt")
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
为OutPuple变量选择一个合适的初始值,为您的图像提供足够的空间。
< P>另一个要考虑的问题,如果图像仅用于打印报表,则将其放入页面页眉。Worksheets(1).PageSetup.LeftHeaderPicture.Filename = "C:\header.JPG"
图像将嵌入到文件中。它仅在“打印预览”模式和打印报告时可见