Gibt es eine Möglichkeit, ein JPEG-Bild mit C# oder VBA in das visio einzufügen? Nach dem Einfügen gibt es eine Möglichkeit, Eigenschaften wie Breite, Höhe, Position auf der Zeichnung zu formatieren?Jpeg-Bild programmgesteuert in C# oder VBA in Visio-Zeichnung einfügen
Antwort
Wenn Bilder in Visio importiert werden, werden sie in eine Standardform verpackt (mit einer Type-Eigenschaft von visTypeForeignObject).
Von da an sprechen Sie nur mit Zellen im ShapeSheet. (Siehe diesen Beitrag für weitere Details auf dem ShapeSheet http://visualsignals.typepad.co.uk/vislog/2007/10/just-for-starte.html)
So können Sie mit dem Makrorecorder auf Visio für diese Art von Sache starten.
Sub Macro1()
'Enable diagram services
Dim DiagramServices As Integer
DiagramServices = ActiveDocument.DiagramServicesEnabled
ActiveDocument.DiagramServicesEnabled = visServiceVersion140 + visServiceVersion150
Dim UndoScopeID2 As Long
UndoScopeID2 = Application.BeginUndoScope("Auto Size Page")
Application.ActiveWindow.Page.AutoSize = False
Application.EndUndoScope UndoScopeID2, True
Dim UndoScopeID3 As Long
UndoScopeID3 = Application.BeginUndoScope("Insert")
Application.ActiveWindow.Page.Import "C:\SomeImage.jpg"
Application.EndUndoScope UndoScopeID3, True
ActiveWindow.DeselectAll
ActiveWindow.Select Application.ActiveWindow.Page.Shapes.ItemFromID(1), visSelect
Application.ActiveWindow.Selection.Move 2.129396, -0.904364
Dim UndoScopeID4 As Long
UndoScopeID4 = Application.BeginUndoScope("Size Object")
Application.ActiveWindow.Page.Shapes.ItemFromID(1).CellsSRC(visSectionObject, visRowXFormOut, visXFormPinX).FormulaU = "46.261665987369 mm"
Application.ActiveWindow.Page.Shapes.ItemFromID(1).CellsSRC(visSectionObject, visRowXFormOut, visXFormPinY).FormulaU = "212.02916285428 mm"
Application.ActiveWindow.Page.Shapes.ItemFromID(1).CellsSRC(visSectionObject, visRowXFormOut, visXFormWidth).FormulaU = "103.47666530807 mm"
Application.EndUndoScope UndoScopeID4, True
Dim UndoScopeID5 As Long
UndoScopeID5 = Application.BeginUndoScope("Size Object")
Application.ActiveWindow.Page.Shapes.ItemFromID(1).CellsSRC(visSectionObject, visRowXFormOut, visXFormPinX).FormulaU = "46.261665987369 mm"
Application.ActiveWindow.Page.Shapes.ItemFromID(1).CellsSRC(visSectionObject, visRowXFormOut, visXFormPinY).FormulaU = "185.77916321819 mm"
Application.ActiveWindow.Page.Shapes.ItemFromID(1).CellsSRC(visSectionObject, visRowXFormOut, visXFormHeight).FormulaU = "73.441667394486 mm"
Application.EndUndoScope UndoScopeID5, True
'Restore diagram services
ActiveDocument.DiagramServicesEnabled = DiagramServices
End Sub
Die Makroaufzeichnung in Bezug auf die aktuelle Auswahl arbeitet, aber Sie nicht brauchen: ein Bild auf die Seite ziehen, wird Ausgabe etwas wie dieses produzieren. Außerdem verwendet es die SRC-Syntax (Section, Row, Column) anstelle der einfacheren Syntax für den Zellennamen. So eine Übersetzung der oben könnte wie folgt sein:
Sub TestAddImage()
Call DropImage(ActivePage, "C:\SomeImage.jpg")
End Sub
Private Sub DropImage(ByRef vPag As Visio.Page, imageFile As String)
If Not vPag Is Nothing Then
Dim newShp As Visio.Shape
Set shpNew = vPag.Import(imageFile)
'Set position
shpNew.CellsU("PinX").FormulaU = "75mm"
shpNew.CellsU("PinY").FormulaU = "175mm"
'Set size
shpNew.CellsU("Width").FormulaU = "100mm"
shpNew.CellsU("Height").FormulaU = "80mm"
End If
End Sub
AC# Version davon würde wie folgt aussehen:
void Main()
{
var vApp = MyExtensions.GetRunningVisio();
DropImage(vApp.ActivePage, @"C:\SomeImage.jpg");
}
private void DropImage(Visio.Page vPag, string imageFile)
{
if (vPag != null)
{
var shpNew = vPag.Import(imageFile);
//Set position
shpNew.CellsU["PinX"].FormulaU = "75mm";
shpNew.CellsU["PinY"].FormulaU = "175mm";
//Set size
shpNew.CellsU["Width"].FormulaU = "100mm";
shpNew.CellsU["Height"].FormulaU = "80mm";
}
}
Beachten Sie, dass GetRunningVisio
ist meine Erweiterungsmethode für die Verwendung mit LinqPad:
http://visualsignals.typepad.co.uk/vislog/2015/12/getting-started-with-c-in-linqpad-with-visio.html
... aber es liegt an Ihnen, wie Sie das Anwendungsobjekt erhalten.
- 1. Zellkommentare in Excel programmgesteuert einfügen
- 2. Programmgesteuert Zeilen in Tabelle einfügen
- 3. Entfernen eines nicht leeren Verzeichnis programmgesteuert in C oder C++
- 4. Einfügen von Bild in VBA
- 5. Einfügen in eine Excel-VBA-Zeichenfolge
- 6. Einfügen Zeichenfolge nach Wort in VBA Wort
- 7. VBA in die gleiche Zeile einfügen
- 8. ComboBox programmgesteuert in die Zelle einfügen
- 9. Eingabe in ein Drupal-Formular programmgesteuert einfügen
- 10. Verhindern Einfügen oder Aktualisieren von Daten in C# oder SQL
- 11. CopyOrigin on Einfügen in Excel VBA
- 12. C# Bericht programmgesteuert erstellen
- 13. VBA Einfügen von Daten in große Stücke
- 14. Desktop-Umgebung in Linux programmgesteuert in C
- 15. Kopieren Einfügen VBA-Schleife
- 16. Probleme mit Einfügen als Werte in VBA
- 17. VBA Einfügen Spalte in Zeile beginnt
- 18. Excel VBA Zeile in Blatt einfügen/löschen
- 19. Einfügen Spezialfehler in VBA Excel 2010
- 20. Wert von VBA in HTML-Liste einfügen
- 21. Einfügen colums in verschiedenen Blatt mit VBA
- 22. Einfügen in mehrere Lesezeichen-Standorte - Excel VBA
- 23. VBA zwei Spalten in Array einfügen
- 24. Variablenwert in Zelle mit Text einfügen VBA
- 25. einfügen Baustein in der Fußzeile mit VBA
- 26. Letzte Zeile Einfügen in anderes Arbeitsblatt VBA
- 27. VBa einfügen Abkürzung
- 28. VBA Kopieren + Einfügen Code
- 29. VBA - Objekte nebeneinander einfügen
- 30. Ziel + Einfügen Spezialfehler VBA
John, das ist großartig, es hat perfekt funktioniert. Aber ist etwas eingebaut, um die Form am Ende der Seite wie shpNew.cellsu.end zu platzieren? Oder muss ich ein Makro ausführen, um die Koordinaten zu finden, die von Ihnen in "sub Macro1" angezeigt werden? – Puneeth
Dafür müssten Sie den PinX/Y-Zellen eine Formel und keinen konstanten Wert hinzufügen. Für PinX: '" ThePage! PageWidth- (Width-LocPinX) "' und für PinY '" ThePage! PageHeight- (Height-LocPinY) "'. Dies würde die Form der linken oberen Ecke der Seite festlegen. – JohnGoldsmith
Sorry, meine Frage war, am Ende der Seite zu platzieren, ich glaube, Formel mit + ändern würde die Form am unteren Rand der Seite, nicht wahr? – Puneeth