用AngularJS和EPPlus生成CSV的问题

我发送一个对象数组回到服务器(WebApi),使用EEPlus做一个ExcelPackage.GetAsByteArray(); 然后将其发送回AngularJS前端。

我将信息存储在DataTable中。

DataTable table = new DataTable(); table.Columns.Add("WOS Name", typeof(string)); table.Columns.Add("Consultant Name", typeof(string)); table.Columns.Add("Client", typeof(string)); table.Columns.Add("Cohort", typeof(string)); table.Columns.Add("Not Started", typeof(int)); table.Columns.Add("Awaiting Wos Release", typeof(int)); table.Columns.Add("Released To Consultant", typeof(int)); table.Columns.Add("Released To Wos", typeof(int)); table.Columns.Add("Awaiting Wos Signoff", typeof(int)); table.Columns.Add("Current", typeof(int)); table.Columns.Add("WOS Overdues", typeof(int)); table.Columns.Add("Consultant Overdues", typeof(int)); foreach (var stat in statistics) { table.Rows.Add( stat.WosName, stat.ConsultantName, stat.Client, stat.Cohort, stat.NotStarted, stat.AwaitingWosRelease, stat.ReleasedToConsultant, stat.ReleasedToWos, stat.AwaitingWosSignoff, stat.Current, stat.WosOverdues, stat.ConsultantOverdues ); } 

我将它保存为一个字节数组。

 using (ExcelPackage pck = new ExcelPackage()) { //Create the worksheet ExcelWorksheet ws = pck.Workbook.Worksheets.Add("AppraisalStatistic"); //Load the datatable into the sheet, starting from cell A1. ws.Cells["A1"].LoadFromDataTable(table, true); //Excel is properly formatted. //pck.SaveAs(new System.IO.FileInfo("C:\\Users\\Burton\\Desktop\\a.csv")); return pck.GetAsByteArray(); } 

然后我把它发回给Angular。

 var result = new HttpResponseMessage(HttpStatusCode.OK) { Content = new ByteArrayContent(outputBytes) }; result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream"); result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment") { FileName = "AppraisalStatisics.csv" }; return result; 

这是我对Angular的。 $ scope.statistics是我发送回数据表的数据。

  $scope.getExcel = function () { AdminAjax.getAppraisalStatExcel($scope.statistics).then( function (byteData) { console.log(byteData); var anchor = angular.element('<a/>'); anchor.attr({ href: 'data:attachment/csv;charset=utf-8,' + encodeURIComponent(byteData), target: '_blank', download: 'AppraisalStatisics.csv' })[0].click(); }, function (errorResult) { console.log(errorResult); }); } 

当Excel下载时,这是不正确的。 这是我打开Excel表时看到的。

  "PK}p�F�H��3[Content_Types].xml���J1�_e�U��D���U�>���vC��̴�oo6+""��z�$����3_�k����Њ�����ƆM+�Ö�[�C0�b�V��r1_RSf��gNwJ���ɘ0����kÞ¨zT�����10���!�{�`��Y���u+ %g5p�R�L4�""���]�an� ��Dft��z���4��4$<������""b�Y�&��/#�RF0�#�w�V���1�2?�/����G�����j""����*��evA��C:G1*���!�y�\��<�φoU�~� PK�H��3PK}p�F��닮'_rels/.rels����0�WYz��c��1�j��V�e�" o��b<xl���Ӳ^��=ч���"Ë�U�k���� Di��Ȣ��Uy�I�t����1��A�8Ë�C�6�Y�4zÃT�4��y~��Ӏ��-�7�֮�����gR�m�Q��H����e�/���h� �*���� PK��닮'PK}p�FU|��Wxl/workbook.xml���j�0D�����DI99P�K �@�����E$��UH?���C{�mfg�1�A|���wIn�PJn�7`YS�T��8B�����w�N�1��l��1@��d�Y�L�K2#t2 �fT��a����}z|�d�a�;��K�o�N����T���~͙���R�J�N�)?v��jÅ���]���:�ª���V�9��ϱmͲ��PKU|��WPK}p�F�b���4xl/_rels/workbook.xml.rels���j�0�_���8�`�Q��1��@�J�������k6VR(c���d��>���kÔ‰2�1h�]:����+(���D��rKJYa�'V�؀IoZ��4"W1Q(/m�#Jis��#v�u�����L�q��5��S���c���ޣ�)È}��ȞH sGb�:b�]��PAß—Y<R�e�_^M~�����1��I.��[�ǿ2��ګPK�b���4PK}p�F����hxl/worksheets/sheet1.xml���r�0�_E�{#lH�z�L�͡�C��ab�G���[}��Be�1���&��v��v���'|���Ð'rѲ>“#ڗ�j�m�����_�����h(�H὘�7R�g����]!؞�J�� ��|KX]�%]����^���=Nw�TG���|���\b�iQ %t�K��h{�U����G��~���#����'q�F盼3�q�dU���%��稢uq�����v�He���Q�"9;!e��8 "Ï«W���U�1�BrT����MLt��&�:�� _'�6�Db�:���'�Hm��Nd6��k����c���]%�M�^M�^M� �6�0z�@���a���8z�h�q�$���A�Z���@��Q��-�ms�)�;�bbL�Â����K'>�HL!1��5$n 1�#j]�.�9�_8w f���.��W��Bb��t(2�#^" &7o@��'��$�Ór}3�PK����hPK}p�F���Z "xl/styles.xml�T�n�0�W�?X|@��C�TB꥗�Ы 6XZ?d;����MD�J�������Һ衧ԡA��U�;��0�Ǟ" b���rb�2��)5��P�ڹI.v�W "�����R�D-�EGu���vž`JF������_�C�����w�%��xcxdK�(\�5��]�>�� X�<G'u5q�YO " �רi�I%�jFl��DgȘ/w�X����ap�(�R��������2����]���i�(��H���NI�NÉK�:R��|}���rC��h�+�Ӟ��7��0���@[鮫���� "g��S�%��[mv�u��¡��V���<!QlN�������j��/a�PK���ZPK}p�F���6�xl/sharedStrings.xml}R�N1��Mߥȃ1�îˆ'��b|k����=�-�_o�FE;3�3�6���輶���^_RekM�\<-�/�xVT+c s��^��ȼg���s�0w7R���V����""���U�n-}�PÕ¾A���A�%[�I@eq.�5�~8���.2.�����Lr��=���" �`b2>M���Pc]�N-C��1����Ni�]��z��A������C�s����Q��dW�$}p�ĥ� �����Z�O����je�-%ÉŒ9���ea"-�H0���4&N.�1�V����3L^�ѱ� ���b��s[��M�����PK���6�PK-}p�F�H��3[Content_Types].xmlPK-}p�F��닮'Y_rels/.relsPK-}p�FU|��W@xl/workbook.xmlPK-}p�F�b���4Hxl/_rels/workbook.xml.relsPK-}p�F����hfxl/worksheets/sheet1.xmlPK-}p�F���Z "�xl/styles.xmlPK-}p�F���6�xl/sharedStrings.xmlPK�� " 

编辑:似乎这可能是通过AJAX请求下载的响应。 不过,我正在使用和href。

EPPlus不会生成CSV文件 – 只有XLSX。 Excel可以打开你在本地生成的一个(注释掉的行),因为它是一个非常常见的情况,它专门寻找的 – 在你的硬盘驱动器上的任何XLSX和重命名为.csv和Excel将打开它,通常是一个警告。

因此,如果浏览器预期由您的响应stream所指定的csv并获得二进制zip文件(这是一个XLSX),它不会那样。 你将不得不调整你的href适当的上下文

如果您只需要一个csv输出,您就不需要EPPlus plus – 只需循环遍历表格即可。 有很多方法可以用这里贴出来的方法来做到这一点:

在.net中写入CSV文件