Копировать из Excel в contenteditable, включая изображения - PullRequest
0 голосов
/ 16 февраля 2020

В настоящее время мы реализуем функцию, которая позволяет пользователю копировать таблицу из Excel в contenteditable div. Простая скрипка здесь:

https://codepen.io/sebetzian/pen/PoqNOOy

Теперь есть таблицы Excel со встроенными изображениями, и мы также хотим извлечь их. В буфере обмена HTML мы находим теги, которые содержат gfxdata и ссылку на локальную копию изображения в файловой системе.

Из браузера мы не можем получить доступ к файловой системе и даже к данным gfx выглядит как строка base64, мы не можем ее проанализировать. Кто-нибудь знает, как работать с этими данными для восстановления образа?

РЕДАКТИРОВАТЬ 17.02.2020: Итак, из Office Dev Center Forum Я узнал, что данные gfx - это zip-файл в кодировке base64, содержащий несколько файлов XML и само изображение в папке / Media. C# фрагмент кода будет добавлен сегодня вечером.

Буфер обмена Excel:

<v:stroke joinstyle="miter"/>
   <v:formulas>
    <v:f eqn="if lineDrawn pixelLineWidth 0"/>
    <v:f eqn="sum @0 1 0"/>
    <v:f eqn="sum 0 0 @1"/>
    <v:f eqn="prod @2 1 2"/>
    <v:f eqn="prod @3 21600 pixelWidth"/>
    <v:f eqn="prod @3 21600 pixelHeight"/>
    <v:f eqn="sum @0 0 1"/>
    <v:f eqn="prod @6 1 2"/>
    <v:f eqn="prod @7 21600 pixelWidth"/>
    <v:f eqn="sum @8 21600 0"/>
    <v:f eqn="prod @7 21600 pixelHeight"/>
    <v:f eqn="sum @10 21600 0"/>
   </v:formulas>
   <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
   <o:lock v:ext="edit" aspectratio="t"/>
  </v:shapetype><v:shape id="_x0000_s2107" type="#_x0000_t75" style='position:absolute;
   margin-left:4.5pt;margin-top:32.25pt;width:49.5pt;height:49.5pt;z-index:3;
   visibility:visible' o:gfxdata="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
AAYArwEAAP4UAAAAAA==
">
   <v:imagedata src="file:///C:/Users/XXXX/AppData/Local/Temp/msohtmlclip1/01/clip_image001.png"
    o:title=""/>
   <x:ClientData ObjectType="Pict">
    <x:SizeWithCells/>
    <x:CF>Bitmap</x:CF>
    <x:AutoPict/>
   </x:ClientData>
  </v:shape>
...