如何使用c#将DataGrid保存到XLS?

时间:2012-05-28 14:11:48

标签: c# excel export-to-excel

我想在我的应用程序中添加将数据保存到XLS(旧的Excel文件)的功能。

我在ASP.NET here中看到过如何执行此操作的示例,但我不知道这如何转换为桌面应用程序的c#代码。

我还看了一下excel自动化,看起来像这样:

private void button1_Click(object sender, EventArgs e)
{
    Excel.Application xlApp ;
    Excel.Workbook xlWorkBook ;
    Excel.Worksheet xlWorkSheet ;
    object misValue = System.Reflection.Missing.Value;

    xlApp = new Excel.ApplicationClass();
    xlWorkBook = xlApp.Workbooks.Add(misValue);

    xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
    xlWorkSheet.Cells[1, 1] = "http://csharp.net-informations.com";

    xlWorkBook.SaveAs("csharp-Excel.xls", Excel.XlFileFormat.xlWorkbookNormal, misValue, misValue, misValue, misValue, Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue);
    xlWorkBook.Close(true, misValue, misValue);
    xlApp.Quit();

    releaseObject(xlWorkSheet);
    releaseObject(xlWorkBook);
    releaseObject(xlApp);

    MessageBox.Show("Excel file created , you can find the file c:\\csharp-Excel.xls");
}

private void releaseObject(object obj)
{
    try
    {
        System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
        obj = null;
    }
    catch (Exception ex)
    {
        obj = null;
        MessageBox.Show("Exception Occured while releasing object " + ex.ToString());
    }
    finally
    {
        GC.Collect();
    }
}

我不想使用它,因为:

  1. 如果我导出大量数据,那将是ueberslow

  2. 我希望这可以在没有安装Microsoft Excel的PC上运行

  3. 我也尝试了CarlosAg.Excel.Xml,它似乎有效,除了当我打开文件时,我收到来自excel的警告,该文件不是XLS格式,而是其他一些一。

    任何人都可以向我推荐一个可以执行此操作的免费c#库,或者向我展示如何使用传统的.Net库将数据保存到XLS中吗?

2 个答案:

答案 0 :(得分:1)

使用codeplex.com

上提供的NOPI
  

这个项目是POI Java项目的.NET版本   http://poi.apache.org/。 POI是一个开源项目,可以提供帮助   你读/写xls,doc,ppt文件。它有广泛的应用。

以下是如何使用NOPI的示例:

        using (FileStream fileOut = new FileStream("poi-test.xls", FileMode.OpenOrCreate))
        {
            HSSFWorkbook workbook = new HSSFWorkbook();
            var worksheet = workbook.CreateSheet("POI Worksheet");

            // index from 0,0... cell A1 is cell(0,0)
            var row1 = worksheet.CreateRow((short)0);

            var cellA1 = row1.CreateCell((short)0);
            cellA1.SetCellValue("Hello");
            ICellStyle cellStyle = workbook.CreateCellStyle();
            cellStyle.FillForegroundColor = HSSFColor.GOLD.index;
            cellStyle.FillPattern = FillPatternType.SOLID_FOREGROUND;//.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
            cellA1.CellStyle = cellStyle;

            ICell cellB1 = row1.CreateCell((short)1);
            cellB1.SetCellValue("Goodbye");
            cellStyle = workbook.CreateCellStyle();
            cellStyle.FillForegroundColor = HSSFColor.LIGHT_CORNFLOWER_BLUE.index;
            cellStyle.FillPattern = FillPatternType.SOLID_FOREGROUND;
            cellB1.CellStyle = cellStyle;

            var cellC1 = row1.CreateCell((short)2);
            cellC1.SetCellValue(true);

            var cellD1 = row1.CreateCell((short)3);
            cellD1.SetCellValue(new DateTime());
            cellStyle = workbook.CreateCellStyle();
            cellStyle.DataFormat = HSSFDataFormat
                    .GetBuiltinFormat("m/d/yy h:mm");
            cellD1.CellStyle = cellStyle;

            workbook.Write(fileOut);
        }

价: Creating Excel spreadsheets .XLS and .XLSX in C# by Leniel Macaferi 

答案 1 :(得分:0)

另一种方法是导出为CSV(逗号分隔值)文件,这些文件只是包含数据的纯文本文件。 Excel(如果已安装)通常是CSV文件的默认应用程序,您不需要第三方库。