Страницы: 1
RSS
вынуть цифровые данные из графика Excel вставленного в Word
 
Прислали много графиков, сделанных в экселе и вставленных в ворд.
"Связь с источником данных разорвана", но если навести мышкой на точку, цифры высвечиваются - значит в какой-то форме данные в документе есть.
Как их из документа вынуть?
 
У вас цифры связаны с файлом Excel. В Word никаких данных нет. По крайней мере мне об этом ваш файл "сказал"!
"Все гениальное просто, а все простое гениально!!!"
 
Вот тут находится файл источник (спектры преза new.xlsx).
Код
C:\ykleikova\Desctop\спектры преза new.xlsx
Подозреваю, что цифры вы найдете в нем :)  
Изменено: Nordheim - 12.10.2017 08:52:48
"Все гениальное просто, а все простое гениально!!!"
 
Доброе время суток
Цитата
iva2000 написал:
значит в какой-то форме данные в документе есть.
Есть, chart1.xml. Можно его вытащить и парсить. Путь к координатам по X //c:xVal/c:numRef/c:numCache
В этом узел дочерний c:ptCount с атрибутом val содержит число точек, а дочерние c:pt/c:v собственно значения.
Успехов.
 
Уважаемый Андрей VG,  честно говоря я из вашего письма ничего не понял, сомневаюсь , что автор темы поймет  8-0   :D  ;)  
"Все гениальное просто, а все простое гениально!!!"
 
Nordheim, docx по существу zip-архив. В этом архиве лежит в одной из папок chart1.xml. Файл со структурой xml. //c:xVal/c:numRef/c:numCache XPath путь к узлу с данными Х координат точек графика. Как вы понимаете, к Y координатам путь почти такой же, меняется только c:yVal.
Собственно, решение для тех, кто знает или способен изучить xml.
 
Андрей VG, Я то нашел, и то только потому , что в свое время пытался вскрыть макрос кот. был под паролем. Пришлось Excel переименовывать в Zip. потому как и книга Excel по сути тоже является Zip-архивом.
"Все гениальное просто, а все простое гениально!!!"
 
Путь к файлу источнику
Код
C:\Users\ykleikova\Desktop\[Спектры для презы.xlsx]
Данные по оси X из файла находятся на:
Код
Лист3!$A$2:$A$11
По оси Y:
Код
Лист3!$B$2:$B$11
"Все гениальное просто, а все простое гениально!!!"
 
Nordheim, коллега, скорее всего ключевая проблема в
Цитата
iva2000 написал:
Прислали много графиков, сделанных в экселе и вставленных в ворд.
Скорее всего файлов-то Excel и не прислали. Тогда. увы, только парсинг xml.
Вариант получения данных из извлечённого chart1.xml в папку c:\Path\xml при помощи Power Query
Код
let
    Source = Xml.Tables(File.Contents("C:\Path\xml\chart1.xml")),
    Table4 = Source{4}[Table],
    Table1 = Table4{1}[Table],
    scatterChart = Table1{0}[scatterChart],
    ser = scatterChart{0}[ser],
    xVal = Table.RenameColumns(ser{0}[xVal]{0}[numRef]{0}[numCache]{0}[pt], {{"v", "X"}}),
    yVal = Table.RenameColumns(ser{0}[yVal]{0}[numRef]{0}[numCache]{0}[pt], {{"v", "Y"}}),
    xyTable = Table.Join(xVal, {"Attribute:idx"}, yVal, {"Attribute:idx"})
in
    xyTable
Изменено: Андрей VG - 12.10.2017 11:13:38
 
Вариант парсинга XML в VBA (сам xml нужно вытащить из архива, форма ответа почему-то считала что XML 6 kb > 100kb  :sceptic: ):
Код
Public Sub LoadXML()
    Dim xml As Object, fso As Object, nodesX As Object, nodesY As Object
    Set xml = CreateObject("Msxml.DomDocument")
    Set fso = CreateObject("Scripting.FileSystemObject")
    
    xmlTxt = fso.OpenTextFile(ThisWorkbook.Path & "\chart1.xml").ReadAll
    xml.LoadXML (xmlTxt)
     
    Set nodesX = xml.SelectNodes("*//c:xVal//*//c:v")
    Set nodesY = xml.SelectNodes("*//c:yVal//*//c:v")
    For i = 0 To nodesX.Length - 1
        Cells(i + 1, 1).Resize(1, 2).Value = Array(nodesX(i).Text, nodesY(i).Text)
    Next i
End Sub
In GoTo we trust
 
Цитата
tolstak написал:
fso.OpenTextFile
Коллега, это лишнее. Достаточно
Код
xml.load ThisWorkbook.Path & "\chart1.xml"

С XPath может всё же по аккуратнее?
Код
.SelectNodes("//c:xVal/c:numRef/c:numCache/c:pt/c:v")
 
Цитата
tolstak написал:  parseXml.xlsm  (13.71 КБ)
Огромное вам спасибо!
С помощью вашего скрипта я все графики из документа вынул!  Мегаклассный инструмент!
Страницы: 1
Читают тему
Наверх