2016-08-10 8 views
0

У меня есть метод, который в настоящее время экспортирует результаты хранимой процедуры в файл CSV. Мне было поручено изменить его для экспорта в XLS, но у меня проблемы.C# Экспорт в Excel xls

Код:

protected void ExportFundingSummaryToExcelSA(Object sender, EventArgs e) 
     { 
      const string fileName = "METT Dashboard - Funding Summary"; 
      const string rowFormat = "{0},{1},{2},{3},{4},{5}\n"; 

      Response.Clear(); 
      Response.Buffer = true; 
      Response.AddHeader("content-disposition", "attachment;filename=" + fileName + ".csv"); 
      Response.Charset = ""; 
      Response.ContentType = "text/csv"; 

      GetCompanyGroupCode(); 

      var sb = new StringBuilder(); 
      sb.AppendFormat(rowFormat, "Sector", "Product Line", "Program Number", "Program Description","Participating Companies", "Gross"); 

      var customerId = CurrentUser.Company.Id; 

      var year = 2015; 

      // Set Title Row 
      Response.Write(year + " Products Lines for: " + CurrentUser.Company.Name + " (" + customerId + ")\n"); 

      // Set Generated Date (Report Created on: 9/29/2004 3:33:32 PM) 
      Response.Write("Report Created on: " + System.DateTime.Now.ToString() + "\n\n\n"); 

      var fundingData = GetFundingData(); 

      if (fundingData != null) 
      { 
       if (fundingData.Summary != null && fundingData.Summary.Count > 0) 
       { 
        var summaries = MoveSetAsidesDown(fundingData.Summary); 

        for (var i = 0; i < summaries.Count; i++) 
        { 
         if (fundingData.Programs != null && fundingData.Programs.Count > 0) 
         { 
          foreach (var program in fundingData.Programs) 
          { 
           if (program.PlId == summaries[i].PlId) 
           { 
            sb.AppendFormat(rowFormat, 
                SharePointUtil.ToCsvFriendly(summaries[i].SectorName), 
                SharePointUtil.ToCsvFriendly(summaries[i].PlName), 
                SharePointUtil.ToCsvFriendly(program.TargetId.ToString()), 
                SharePointUtil.ToCsvFriendly(program.TargetName), 
                SharePointUtil.ToCsvFriendly(program.ParticipantsCount.ToString()), 
                SharePointUtil.ToCsvFriendly(program.AmountAllocated.ToString("$###,###,###,##0"))); 
           } 
          } 
         } 
        } 
       } 
      } 

      Response.Write(sb.ToString()); 

      Response.Flush(); 
      Response.End(); 
     } 

Большой улов является манипулирование данными после того, как данные поступают обратно из GetFundingData, я должен сделать это так, потому что наш DBA является, и мне нужно, чтобы сбить это. Я думал, что смогу просто изменить тип контента, но это взорвет его. Любая помощь будет оценена по достоинству.

+2

Можете ли вы рассказать о том, как ваш код «не работает»? Что вы ожидали, и что на самом деле произошло? Если вы получили исключение/ошибку, опубликуйте строку, в которой она произошла, и сведения об исключении/ошибке. Пожалуйста, отредактируйте эти данные или мы не сможем помочь. – FrankerZ

+0

Хорошая точка. Когда я меняю тип контента, он возвращается практически так же, как формат CSV, и не разбивает его по столбцу. – TrevorGoodchild

+1

XLS - это старая шляпа, в наши дни вам будет лучше использовать xlsx, см. Https://blogs.msdn.microsoft.com/chrisrae/2011/08/18/creating-a-simple-xlsx-from-scratch-using- the-open-xml-sdk/ – MikeT

ответ

2

Я думаю, проблема в том, что вы пытаетесь использовать форматирование CSV для создания файла XLS. CSV использует текстовое форматирование с запятыми, разделяющими данные. XLS uses a binary style of formatting. Поскольку XLS - это формат файла Microsoft, вам нужно будет использовать Excel's Object Library для создания файлов. Я не знаю, есть ли у вас опция, но если вы можете включить EPPlus в свое приложение, EPPlus может создавать, открывать и редактировать файлы XLSX. XLSX не XLS, но любая версия Excel после версии 2007 может читать оба типа.

[Редактировать]

Спасибо Scott Chamberlain за указание на то, что TrevorGoodchild использует Sharepoint веб-службы. Как указал Скотт Чемберлен в his comment above, Open XML SDK является опцией при использовании веб-службы IIS. Кроме того, поскольку EPPlus не использует COM Interop, он также может использоваться в вашем приложении.

+0

Он использует Sharepoint (веб-сервис IIS), вы можете [не надежно запускать COM-взаимодействие в веб-службе] (https://support.microsoft.com/en-us/kb/257757). –

Смежные вопросы