2016-08-10 9 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/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ではありませんが、2007バージョン以降のExcelのいずれのバージョンでも両方のタイプを読み取ることができます。

[編集]

はTrevorGoodchildは、SharePointのWebサービスを使用していることを指摘するためにあなたのスコット・チェンバレンをありがとうございます。スコットチェンバレンがhis comment aboveに指摘しているように、Open XML SDKはIIS Webサービスを使用する場合のオプションです。また、EPPlusはCOM Interopを使用しないため、アプリケーションで使用することもできます。

+0

彼はSharepoint(IIS Webサービス)を使用していますが、Webサービス上でCOM Interopを確実に実行することはできません(https://support.microsoft.com/en-us/kb/257757)。 –

関連する問題