Задать вопрос
@bergezer

Как извлечь данные из xlsx файла, полученного из API, и обработать их в самом коде?

Здравствуйте. Я занимаюсь разработкой авто-тестирования API на node.js и возникла такая трудность. У меня есть определенная API, которая возвращает xlsx файл. Но при попытке прочитать данные из body ответа я получаю вот такую штуку:

?S[Content_Types].xml���n�0E%�J
]TUE`�DzE*�מ
��(�}'�T�V�3w�YM��+�hc�Ű���Ɔy->f/�(�T0������x4�$��{֢%JR�n�+�b���&f���y.��
5y;�IA��:1=A�������κ*%g�"�%W���;�*��5�ڄ7,��]���*
�K/s�&[�ǔAlȻ0Q/=�Tй0e�,�da�s�2�*φ��S��d���~,:f8 � �"�V/��?
[���S��;����+栍;2�.@_��x�����+��g����;B���/���>��ߖ�7P傠�Gf?S
_rels/.rels���j�0
�_���8���n/e���h���Ė��-}�������A�B��-ף���q00�jP,�.4�vϳGPY088��#eX���4����v1��@+��ζ%���H�t�� �����ajH
����Կ3�U���1�5���w�6l��Ld�M��vY��8�/��&�xk��#7�%��t����&��!
�[K�P�P��R�D���'ړ�C�oꙐ>y��PTx���f?SdocProps/app.xmlM��
�0D�~EȽ��ADҔ��A? ��6�lB�J?ߜ���0���ͯ�)�@��׍H6���V>��$;�SC
�GS�b����l�&�e��L!y�%��49��`_���4G���F��J��Wg
~�P�|wؑf?SdocProps/core.xmlm�]K�0��J�}��C�B�!�@PXQ�
ɱ-6$�n�޴�
�]��9'o�=�}��5f9���7m��]��(Da���
!�m]Jǥ���ց�=�<&p�*���8!Av�E�aR�j�1]}K��o�RPzN4D�Ddfn1�R�E���0
�$0�a9#?l�ÿs����/�8������#�w���Yo��K�uyRs�ADP( x<�T�wnv�.h�2��ئ��l�Y�R�_���l}}�
���o&ny.ɟ��OP,�ݚf?SdocProps/custom.xml��KO�0���
�w׎C� I*��g�W��?do��G%�^F;Z�7#m�zU�����G
�2�����]�9F��yz������I+�hM�8�%l�_�j��o�1ҍV�Ó�p�l�/\����}N��~���6N>� ��lƢ� |�x��Y�������P��a��f?Sxl/sharedStrings.xml��1
�0��S��6�ZI� x=@�������u��@Aϐ�Ⱥ�*����g����V� ��qP��N�R�u��Yw�'��,JM�m�#�*-7��~s�CC�3k�1!�fB%�B��2�Jl�5���2!��I��!Q�Ԙ3��Y�����v/w�'�D��k�ww�G_��Ґ����6����
xl/styles.xml���n� ��>bop2TQ��P)U�RWb�6*�����ӤS�Nw�s���3ߍ֐ Z��gH�2P��/X�f?S
���t��(l��������ҝx�!N=@$ɀ��}��3c���ʰr`:i��2��w,

�T��R#�voc �;c�iE��Û��E<|��4Iɣ����F#��n���B�z�F���y�j3y��yҥ�jt>���2��Lژ�!6�2F�OY��4@M�!���G��������1�t��y��p��" n����u�����a�ΦDi�9���%I��9��}���cK��T��$?������`J������7���o��f��M|P�1X@Cf?Sxl/workbook.xml���N�0D�|��wj��8��J�!Q�o�Mc5���i�|�T��֣y;;r���'��j�@P0Ѻp��~��?���k����Ϣ�!i�sk)���cZőBq��s�|�idB�z���V�Qztn 5�'#v�3�ͧ��o!L�R6�nL��4{ea1S��4t8$�6����~�I
j��p�L���]��kg5��n@����jNX��r��Pl5e��f?Sxl/_rels/workbook.xml.rels��Mk�0
�=��{��v�KW\VS��hc���ޣ�)����AߏY���4��+����瘏��Z^F���5FϮ��Pg뢨�f?Sxl/worksheets/sheet1.xmle�[O�0�˿����@;�$��{�\��:Q�>MU��`��Cg��xzł����a�Zni@)_���Ua6�Eқ�l=��ULʦ�yD)������E]��|ˀ9Sm���q
���Q�Yڍ��N�m�$��=m�6Z�T����q��:����9���n��W֤<�D��)l�L�����#_f7Io��7Ȩ���7��_4����
��:-������rҭ�Fѽ�R�%��`�!sP�|/61Y2��(���f�:�v�k�rJ�2��
����ſ���ݱ*�o���/��i�9mz�\K�Y�l�
X�b�Q�=�C%�@ʼn=�Y|͞�lz��c6�f�1��0A����v��7�je<�-��t��Ü��ZԌ���-T8tq�j��i6����P��f?S傠�G�[Content_Types].xmf?STx����
�_rels/.relf?S�|wؑ��docProps/app.xmf?S,�ݚ��docProps/core.xmf?S��a����docProps/custom.xmf?S��/X��xl/sharedStrings.xmf?xl/styles.xmf?Sl5e��]xl/workbook.xmf?Sg뢨�4� xl/_rels/workbook.xml.relf?S��*�
xl/worksheets/sheet1.xmlPK

�+


Как я понял, я получаю zip архив, который является нужным мне xlsx файлом, но у меня не получается ни прочитать его как excel, ни обработать как zip. Подскажите, как мне прочитать этот файл в самом коде, вытянуть нужные данные и дальше работать с ними?

Запрос на API отправляется через axios:
downloadTemplateByModelId(id, authorization = config.mappingCrudOptions.admin) {
    const headers = (authorization !== false) ? { authorization } : {};

    headers['content-type'] = 'application/xml';
    headers['content-disposition'] = `attachment; filename=${id}_product-reference-template.xlsx`;
    return this.get(`/v1/models/${id}/product-reference-template`, { headers });
  }

В коде самого теста я просто сохраняю весь response, полученный в результате этого метода:
response = await mappingCrud.downloadTemplateByModelId(testData[0].Model_ID);


При просмотре этой API через Swagger его код html показывает:
<a href="blob:https://***/ca043dcb-0971-49b7-a382-3a5c98f1501f" download="1103_product-reference-template.xlsx">Download file</a>

и в нем самом есть кнопка Download, по которой загружается и открывается нормальных xlsx файл. При загрузке по прямой ссылке " https://***...." качается zip архив, с которым можно спокойно работать как с архивом, так и переименовать его в xlsx для excel
  • Вопрос задан
  • 706 просмотров
Подписаться 1 Простой 6 комментариев
Пригласить эксперта
Ответы на вопрос 1
@acwartz
Тут должна быть ваша реклама.
Потому excel это архив и работать с ним надо как с бинарным файлом.
Content-type обычно application/octet-stream
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы