C#导出到Excel xls

C#导出到Excel xls,c#,excel,C#,Excel,我有一个方法,当前可以将存储过程的结果导出到CSV文件。我的任务是将其修改为导出到XLS,但我遇到了一些麻烦 守则: protected void ExportFundingSummaryToExcelSA(Object sender, EventArgs e) { const string fileName = "METT Dashboard - Funding Summary"; const string rowFormat =

我有一个方法,当前可以将存储过程的结果导出到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();
        }
protectedvoid ExportFundingSummaryToExcelSA(对象发送方,事件参数e)
{
const string fileName=“METT仪表板-资金摘要”;
const string rowFormat=“{0},{1},{2},{3},{4},{5}\n”;
Response.Clear();
Response.Buffer=true;
AddHeader(“内容处置”、“附件;文件名=“+filename+”.csv”);
响应。Charset=“”;
Response.ContentType=“text/csv”;
GetCompanyGroupCode();
var sb=新的StringBuilder();
sb.附录格式(行格式,“部门”、“产品线”、“项目编号”、“项目说明”、“参与公司”、“总额”);
var customerId=CurrentUser.Company.Id;
风险值年份=2015年;
//设置标题行
响应。为“+CurrentUser.Company.Name+”(“+customerId+”)\n“)写入(年份+”产品行;
//设置生成日期(创建报告的日期:9/29/2004 3:33:32 PM)
Response.Write(“在以下日期创建的报告:”+System.DateTime.Now.ToString()+“\n\n\n”);
var fundingData=GetFundingData();
if(fundingData!=null)
{
if(fundingData.Summary!=null&&fundingData.Summary.Count>0)
{
var汇总=MoveSetAsidesDown(fundingData.Summary);
对于(变量i=0;i0)
{
foreach(fundingData.Programs中的var程序)
{
if(program.PlId==摘要[i].PlId)
{
sb.AppendFormat(行格式,
SharePointUtil.ToCsvFriendly(摘要[i].SectorName),
SharePointUtil.ToCsvFriendly(摘要[i].PlName),
SharePointUtil.ToCsvFriendly(program.TargetId.ToString()),
SharePointUtil.ToCsvFriendly(program.TargetName),
SharePointUtil.ToCsvFriendly(program.ParticipantScont.ToString()),
SharePointUtil.tocsfriendly(program.AmountAllocated.ToString($###################,###0”);
}
}
}
}
}
}
写(某人写的东西);
Response.Flush();
Response.End();
}

最大的问题是数据操作,一旦数据从GetFundingData返回,我就必须这样做,因为我们的DBA出局了,我需要解决这个问题。我原以为我可以改变内容类型,但结果却失败了。任何帮助都将不胜感激。

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

[编辑]


感谢Scott Chamberlain指出TrevorGoodchild正在使用Sharepoint web服务。正如Scott Chamberlain在中指出的,在使用IIS web服务时,是一个选项。此外,由于EPPlus不使用COM互操作,因此它也可能在您的应用程序中可用。

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

[编辑]


感谢Scott Chamberlain指出TrevorGoodchild正在使用Sharepoint web服务。正如Scott Chamberlain在中指出的,在使用IIS web服务时,是一个选项。此外,由于EPPlus不使用COM互操作,因此它也可以在您的应用程序中使用。

能否详细说明代码“不工作”的原因?你在期待什么,到底发生了什么?如果您遇到异常/错误,请发布发生该异常/错误的行以及异常/错误详细信息。请把这些细节写进去,否则我们可能帮不上忙。说得好。当我更改内容类型时,它返回的方式基本上与CSV格式相同,并且不会按列进行分割。XLS是一个旧帽子,现在您最好使用xlsx查看您的问题是否涉及将查询结果获取到Excel文件中,省去您的烦恼,并使用一个本机支持该功能的Excel库。看到这个问题,您只需要四行代码就可以完成。如果您不明确需要不推荐的格式
.xls
,我强烈建议您切换到
.xlsx
,并使用Microsoft提供的开放式XML SDK,就像前面提到的文章MikeT linked to一样。部分问题是Excel office互操作不能很好地与IIS服务器(如您正在使用的sharepoint)配合使用。OpenXMLSDK在IIS服务器上运行良好。您能否详细说明代码“不工作”的原因?你在期待什么,到底发生了什么?如果您遇到异常/错误,请将发生的行发布到