Работает только с активным слоем. Конверитует палитру в RGB
поумолчанию сохраняет в 1 файл со всеми слоями "C:\temp\polygon.csv" и N-файлов равное количеству слоев путь тот же, только название файлов от 001 до 999
Спойлер
Код: Выделить всё
Sub Shape2csv()
Dim a1 As Long, a2 As Long, a3 As Long, a4 As Long, a5 As Long, a6 As Long, R As Long, G As Long, B As Long
Dim x As Double, Xend As Double, y As Double, Yend As Double
Dim Stn As String, St As String, S As String, Stall As String, txt As String, alltxt As String, massiv() As String
Dim n As Node, n2 As Node
Dim s1 As Shape, s2 As Object, sr As New ShapeRange
Dim i As Integer
Dim MyFile
If ActiveSelectionRange.Count = 0 Then Set sr = activeLayer.FindShapes _
Else Set sr = ActiveSelectionRange.Shapes.FindShapes
If sr.Count = 0 Then Exit Sub
' Application.EventsEnabled = False '
' Application.Optimization = True '
' ActiveDocument.PreserveSelection = True '
a1 = sr.Count
ReDim massiv(1 To a1)
a2 = 1
a5 = 1
MyFile = FreeFile
Set s1 = activeLayer.Shapes(a2)
For Each s1 In sr
i = i + 1
a4 = s1.Curve.SubPaths.Count
If s1.Fill.UniformColor.Type <> cdrColorRGB Then
s1.Fill.UniformColor.ConvertToRGB
End If
Stall = ""
If a4 = 1 Then
a5 = s1.Curve.Segments.Count
St = ""
Stn = ""
For a3 = 1 To a5
If a3 = a5 Then
Set n = s1.Curve.Segments.Item(a3).StartNode
x = n.PositionX
y = n.PositionY
Xend = s1.Curve.Segments.Item(1).StartNode.PositionX
Yend = s1.Curve.Segments.Item(1).StartNode.PositionY
Stn = Stn & x & " " & y & "," & Xend & " " & Yend
Else
Set n = s1.Curve.Segments.Item(a3).StartNode
x = n.PositionX
y = n.PositionY
Stn = Stn & x & " " & y & ","
End If
Stall = "(" & Stn & ")"
Next a3
Else
For a6 = 1 To a4
a5 = s1.Curve.SubPaths.Item(a6).Segments.Count
St = ""
Stn = ""
For a3 = 1 To a5
If a3 = a5 Then
Set s2 = s1.Curve.SubPaths.Item(a6)
Set n = s2.Segments.Item(a3).StartNode
x = n.PositionX
y = n.PositionY
Set n2 = s2.Segments.Item(1).StartNode
Xend = n2.PositionX
Yend = n2.PositionY
Stn = Stn & x & " " & y & "," & Xend & " " & Yend
Else
Set s2 = s1.Curve.SubPaths.Item(a6)
Set n = s2.Segments.Item(a3).StartNode
x = n.PositionX
y = n.PositionY
Stn = Stn & x & " " & y & ","
End If
Next a3
If a6 = a4 Then
St = "(" & Stn & ")"
Stall = Stall + St
Else
St = "(" & Stn & ")"
Stall = Stall + St + ","
End If
Next a6
End If
massiv(i) = Stall
Next s1
For i = a1 To 1 Step -1
If a1 = 1 Then
R = s2.Fill.UniformColor.RGBRed
G = s2.Fill.UniformColor.RGBGreen
B = s2.Fill.UniformColor.RGBBlue
Else
R = activeLayer.Shapes(i).Fill.UniformColor.RGBRed
G = activeLayer.Shapes(i).Fill.UniformColor.RGBGreen
B = activeLayer.Shapes(i).Fill.UniformColor.RGBBlue
End If
txt = Chr(34) + "POLYGON(" & massiv(i) & ")" + Chr(34) + "," & R & ":" & G & ":" & B & vbCrLf
Open ("C:\temp\polygon_" & Format(i, "###000") & ".csv") For Output As #MyFile 'Эти 3 строки убрать если не нужно экспортировать каждую кривую в отдельный файл
Print #MyFile, "WKT,RGB" & vbCrLf & txt 'Путь прописан "C:\temp\polygon.csv"
Close '
alltxt = alltxt + txt
Next i
Open ("C:\temp\polygon.csv") For Output As #MyFile 'Эти 3 строки убрать если не нужен 1 файл со всеми слоями
Print #MyFile, "WKT,RGB" & vbCrLf & alltxt 'Путь прописан "C:\temp\polygon.csv"
Close '
' Application.EventsEnabled = True
' Application.Optimization = False
' ActiveDocument.PreserveSelection = False
MsgBox "Все сделал" '
End Sub
Учтите что экспортируются только координаты точек. лучше слой экспортировать в формат wmf и обратно импортировать в корел.