C#导出到Excel xls

时间:2016-08-10 15:41:23

标签: c# excel

我有一个方法,当前将存储过程的结果导出到CSV文件。我的任务是改变它以导出到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已经出局了,我需要敲除它。我以为我只能改变内容类型,但这会让人感到震惊。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

我认为问题是您尝试使用CSV格式创建XLS文件。 CSV使用基于文本的格式,并使用逗号分隔数据。 XLS uses a binary style of formatting。由于XLS是Microsoft文件格式,因此您需要使用Excel's Object Library来创建文件。我不知道您是否有选项,但如果您可以在应用程序中包含EPPlus,EPPlus可以创建,打开和编辑XLSX文件。 XLSX不是XLS,但2007版之后的任何版本的Excel都可以读取这两种类型。

[编辑]

感谢Scott Chamberlain指出TrevorGoodchild使用的是Sharepoint网络服务。正如Scott Chamberlain在his comment above中指出的那样,Open XML SDK是使用IIS Web服务时的一个选项。此外,由于EPPlus不使用COM Interop,它也可以在您的应用程序中使用。