Asp.net 将数据保存到excel文件

Asp.net 将数据保存到excel文件,asp.net,asp.net-mvc,asp.net-mvc-4,c#-4.0,c#-3.0,Asp.net,Asp.net Mvc,Asp.net Mvc 4,C# 4.0,C# 3.0,我基本上需要将存储过程的输出保存到.xls或.xlsx Excel文件中。我能够做到这一点,以一个csv,但不是Excel。有人能帮忙吗?请参阅下面的代码 var result = DealingContext.PopulateUnitRebateData(true, Convert.ToDateTime("2015-01-16")).ToList(); if (result.Count > 0) { string header = @"""Firm ID"",""Account

我基本上需要将存储过程的输出保存到.xls或.xlsx Excel文件中。我能够做到这一点,以一个csv,但不是Excel。有人能帮忙吗?请参阅下面的代码

var result = DealingContext.PopulateUnitRebateData(true, Convert.ToDateTime("2015-01-16")).ToList();

if (result.Count > 0)
{
    string header = @"""Firm ID"",""AccountNumber"",""Portfolio Name"",""Currency"",""Amount"",""Value Date""";
    StringBuilder sb = new StringBuilder();
    sb.AppendLine(header);

    foreach (var i in result)
    {
        sb.AppendLine(string.Join(",",
                            string.Format(@"""{0}""", i.FirmID),
                            string.Format(@"""{0}""", i.AccountNumber),
                            string.Format(@"""{0}""", i.PortfolioName),
                            string.Format(@"""{0}""", i.Currency),
                            string.Format(@"""{0}""", i.Amount),
                            string.Format(@"""{0}""", i.ValueDate)));
    }

    HttpContext context = HttpContext.Current;
    context.Response.Write(sb.ToString());
    context.Response.ContentType = "application/vnd.ms-excel";
    context.Response.AddHeader("Content-Disposition", "attachment; filename=TestData.xls");
    context.Response.End();
}

无法将其保存到excel的原因是excel的格式与csv不同

我用来将数据保存到excel的最好、最简单的库是LinqToExcel

努吉


您可以尝试使用Microsoft.Office.Interop.Excel将数据导出到Excel

传递数据集,该数据集至少有一个DataTable和带路径的有效文件名

    public void WriteToExcel(DataSet dataSet , string fileNameWithPath)
    {
        Excel.Application xlApp;
        Excel.Workbook xlWorkBook;
        Excel.Worksheet xlWorkSheet;
        object misValue = System.Reflection.Missing.Value;

        xlApp = new Excel.Application();
        xlWorkBook = xlApp.Workbooks.Add(misValue);
        xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
        try
        {
            string data = string.Empty;

    //Setting up Columns on Excel
            for (int i = 0; i < 1; i++)
            {
                for (int j = 0; j <= dataSet.Tables[0].Columns.Count - 1; j++)
                {
                    data = dataSet.Tables[0].Columns[j].ColumnName.ToString();
                    xlWorkSheet.Cells[i + 1, j + 1] = data;
                }
            }

    //data Insertion
            for (int i = 0; i <= dataSet.Tables[0].Rows.Count - 1; i++)
            {
                for (int j = 0; j <= dataSet.Tables[0].Columns.Count - 1; j++)
                {
                    xlWorkSheet.Cells[i + 2, j + 1].NumberFormat = "@"; //format as text
                    data = result.Tables[0].Rows[i].ItemArray[j].ToString();
                    xlWorkSheet.Cells[i + 2, j + 1] = data;
                }
            }
            Excel.Range range = xlWorkSheet.Range[xlWorkSheet.Cells[1, 1], xlWorkSheet.Cells[1, result.Tables[0].Columns.Count]];
            range.Font.Bold = true;
            range.Interior.ColorIndex = 15;
            range.EntireColumn.AutoFit();

            xlWorkSheet.PageSetup.LeftMargin = 0.5;
            xlWorkSheet.PageSetup.RightMargin = 0.5;
            xlWorkSheet.PageSetup.Zoom = false;
            xlWorkSheet.PageSetup.FitToPagesWide = 1;
            xlWorkSheet.PageSetup.FitToPagesTall = Math.Ceiling((result.Tables[0].Rows.Count + 1) / 50.0);
            xlWorkSheet.PageSetup.Orientation = Excel.XlPageOrientation.xlLandscape;
            xlWorkSheet.PageSetup.PaperSize = Excel.XlPaperSize.xlPaperLetter;

            xlWorkBook.SaveAsfileNameWithPathExcel.XlFileFormat.xlOpenXMLWorkbook, misValue, misValue, misValue, misValue, Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue);


            xlWorkBook.Close(true, misValue, misValue);
            xlApp.Quit();


        }
        catch (Exception ex)
        {


        }


        finally
        {   
    xlWorkSheet = null;
            xlWorkBook = null;
            if (xlApp != null)
            {
                xlApp.Quit();
            }
            xlApp = null;

            GC.Collect();
            GC.WaitForPendingFinalizers();
        }

    }

它不是保存在excel文件中,因为excel在CSV中不是逗号分隔的文件,我建议您寻找OpenXML SDK,以便在dot net中生成excel文件,它非常简单,并为您提供了对文件的强大控制。
    public void WriteToExcel(DataSet dataSet , string fileNameWithPath)
    {
        Excel.Application xlApp;
        Excel.Workbook xlWorkBook;
        Excel.Worksheet xlWorkSheet;
        object misValue = System.Reflection.Missing.Value;

        xlApp = new Excel.Application();
        xlWorkBook = xlApp.Workbooks.Add(misValue);
        xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
        try
        {
            string data = string.Empty;

    //Setting up Columns on Excel
            for (int i = 0; i < 1; i++)
            {
                for (int j = 0; j <= dataSet.Tables[0].Columns.Count - 1; j++)
                {
                    data = dataSet.Tables[0].Columns[j].ColumnName.ToString();
                    xlWorkSheet.Cells[i + 1, j + 1] = data;
                }
            }

    //data Insertion
            for (int i = 0; i <= dataSet.Tables[0].Rows.Count - 1; i++)
            {
                for (int j = 0; j <= dataSet.Tables[0].Columns.Count - 1; j++)
                {
                    xlWorkSheet.Cells[i + 2, j + 1].NumberFormat = "@"; //format as text
                    data = result.Tables[0].Rows[i].ItemArray[j].ToString();
                    xlWorkSheet.Cells[i + 2, j + 1] = data;
                }
            }
            Excel.Range range = xlWorkSheet.Range[xlWorkSheet.Cells[1, 1], xlWorkSheet.Cells[1, result.Tables[0].Columns.Count]];
            range.Font.Bold = true;
            range.Interior.ColorIndex = 15;
            range.EntireColumn.AutoFit();

            xlWorkSheet.PageSetup.LeftMargin = 0.5;
            xlWorkSheet.PageSetup.RightMargin = 0.5;
            xlWorkSheet.PageSetup.Zoom = false;
            xlWorkSheet.PageSetup.FitToPagesWide = 1;
            xlWorkSheet.PageSetup.FitToPagesTall = Math.Ceiling((result.Tables[0].Rows.Count + 1) / 50.0);
            xlWorkSheet.PageSetup.Orientation = Excel.XlPageOrientation.xlLandscape;
            xlWorkSheet.PageSetup.PaperSize = Excel.XlPaperSize.xlPaperLetter;

            xlWorkBook.SaveAsfileNameWithPathExcel.XlFileFormat.xlOpenXMLWorkbook, misValue, misValue, misValue, misValue, Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue);


            xlWorkBook.Close(true, misValue, misValue);
            xlApp.Quit();


        }
        catch (Exception ex)
        {


        }


        finally
        {   
    xlWorkSheet = null;
            xlWorkBook = null;
            if (xlApp != null)
            {
                xlApp.Quit();
            }
            xlApp = null;

            GC.Collect();
            GC.WaitForPendingFinalizers();
        }

    }