2009-09-03 7 views
2

Je travaille sur un rapport Excel et j'aimerais que les lignes supérieures soient vides pour permettre l'insertion d'une image. Cependant, je ne veux pas que la taille de l'image change la largeur des colonnes et préfère que les données ci-dessous le fassent.Problème dans la génération de rapports Excel

C'est ce que j'ai jusqu'à présent:

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 

Répondre

1

Je vous conseille d'essayer de « fusionner » les cellules dans les 2 premières lignes. Vous pouvez prendre A1 à dire K2 et les fusionner et l'image cadrerait très bien là-dedans ...

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

Une façon de créer votre rapport avec l'image incluse est de créer un classeur de modèle (fichier .xlt) dans lequel vous avez déjà configuré la mise en forme et l'image (s) requises. Ensuite, dans votre code, créez le nouveau classeur de rapport à partir du modèle comme celui-ci:

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

Pour votre image de taille fixe et indépendante de la largeur des colonnes, faites un clic droit dessus, choisissez « Format de l'image ... » , ouvrez l'onglet Propriétés et, dans la section Positionnement de l'objet, sélectionnez "Ne pas déplacer ou dimensionner avec des cellules".

Vous pouvez également utiliser le code pour ajouter l'image à un classeur vide comme suit:

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

Vous pouvez contrôler la première ligne à utiliser pour produire vos données en initialisant une variable de ligne à une valeur appropriée.

Vous pouvez également ajuster les tailles de colonne pour correspondre à vos données en utilisant la méthode AutoFit.

Votre code pourrait alors ressembler à ceci:

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 

Choisissez une valeur initiale appropriée pour la variable outputRow pour donner suffisamment d'espace pour votre image.

0

Une alternative à considérer, si l'image est seulement nécessaire pour les rapports imprimés, est de le mettre dans l'en-tête de la page.

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

L'image sera incorporée dans le fichier. Il ne sera visible qu'en mode "Aperçu avant impression" et lors de l'impression du rapport.

Questions connexes