0

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

我在这里看到了一个关于如何在 ASP.NET 中执行此操作的示例但我不知道这如何转换为桌面应用程序的 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. 如果我导出大量数据会很慢

  2. 如果可能的话,我希望它可以在没有安装 Microsoft Excel 的 PC 上运行

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

谁能向我推荐一个免费的 c# 库来执行此操作,或者向我展示如何使用传统的 .Net 库将数据保存到 XLS?

4

2 回答 2

1

使用NOPI,可在codeplex.com

该项目是位于 http://poi.apache.org/的 POI Java 项目的 .NET 版本。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);
        }

参考: Leniel Macaferi 在 C# 中创建 Excel 电子表格 .XLS 和 .XLSX 

于 2012-05-28T14:17:34.780 回答
0

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

于 2012-05-28T14:22:27.573 回答