如何使用C#创建Excel电子表格而不需要在运行代码的计算机上安装Excel?


当前回答

您可以使用此库创建格式良好的Excel文件:http://officehelper.codeplex.com/documentation参见以下示例:

using (ExcelHelper helper = new ExcelHelper(TEMPLATE_FILE_NAME, GENERATED_FILE_NAME))
{
    helper.Direction = ExcelHelper.DirectionType.TOP_TO_DOWN;
    helper.CurrentSheetName = "Sheet1";
    helper.CurrentPosition = new CellRef("C3");

    //the template xlsx should contains the named range "header"; use the command "insert"/"name".
    helper.InsertRange("header");

    //the template xlsx should contains the named range "sample1";
    //inside this range you should have cells with these values:
    //<name> , <value> and <comment>, which will be replaced by the values from the getSample()
    CellRangeTemplate sample1 = helper.CreateCellRangeTemplate("sample1", new List<string> {"name", "value", "comment"}); 
    helper.InsertRange(sample1, getSample());

    //you could use here other named ranges to insert new cells and call InsertRange as many times you want, 
    //it will be copied one after another;
    //even you can change direction or the current cell/sheet before you insert

    //typically you put all your "template ranges" (the names) on the same sheet and then you just delete it
    helper.DeleteSheet("Sheet3");
}        

示例如下:

private IEnumerable<List<object>> getSample()
{
    var random = new Random();

    for (int loop = 0; loop < 3000; loop++)
    {
        yield return new List<object> {"test", DateTime.Now.AddDays(random.NextDouble()*100 - 50), loop};
    }
}

其他回答

我成功地使用了以下开源项目:

用于OOXML格式的ExcelPackage(Office 2007)XLS格式的NPOI(Office 2003)。NPOI 2.0(Beta版)也支持XLSX。

看看我的博客帖子:

在C中创建Excel电子表格.XLS和.XLSX#

带有Excel表格和动态图表的NPOI

一些第三方组件供应商,如Infregistics或Syncfusion,提供了非常好的Excel导出功能,不需要安装Microsoft Excel。

由于这些供应商还提供高级UI网格组件,如果您希望excel导出的样式和布局模拟应用程序用户界面中网格的当前状态,这些组件特别方便。

如果您的导出是在服务器端执行的,重点是要导出的数据,并且没有到UI的链接,那么我会选择一个免费的开源选项(例如ExcelLibrary)。

我以前参与过一些试图在Microsoft Office套件上使用服务器端自动化的项目。根据这一经验,我强烈建议反对这种做法。

如果您从代码中创建数据表或数据网格视图,则可以使用此简单方法保存所有数据。不建议使用此方法,但它可以100%工作,即使您没有在计算机中安装MS Excel。

try
 {
  SaveFileDialog saveFileDialog1 = new SaveFileDialog();
  saveFileDialog1.Filter = "Excel Documents (*.xls)|*.xls";
  saveFileDialog1.FileName = "Employee Details.xls";
  if (saveFileDialog1.ShowDialog() == DialogResult.OK)
  {
  string fname = saveFileDialog1.FileName;
  StreamWriter wr = new StreamWriter(fname);
  for (int i = 0; i <DataTable.Columns.Count; i++)
  {
  wr.Write(DataTable.Columns[i].ToString().ToUpper() + "\t");
  }
  wr.WriteLine();

  //write rows to excel file
  for (int i = 0; i < (DataTable.Rows.Count); i++)
  {
  for (int j = 0; j < DataTable.Columns.Count; j++)
  {
  if (DataTable.Rows[i][j] != null)
  {
  wr.Write(Convert.ToString(getallData.Rows[i][j]) + "\t");
  }
   else
   {
   wr.Write("\t");
   }
   }
   //go to next line
   wr.WriteLine();
   }
   //close file
   wr.Close();
   }
   }
   catch (Exception)
   {
    MessageBox.Show("Error Create Excel Sheet!");
   }

我使用了几个选项:

如果XLSX是必须的:ExcelPackage是一个很好的开始,但当开发人员停止工作时就夭折了。ExML不是一个坏选项,我仍在一些生产网站上使用它。

不过,对于我的所有新项目,我都使用NPOI,即Apache POI的.NET端口。NPOI 2.0(Alpha)也支持XLSX。

如果您正在创建Excel 2007/2010文件,请尝试此开源项目:https://github.com/closedxml/closedxml

它提供了一种面向对象的方式来操作文件(类似于VBA),而无需处理XML文档的麻烦。可以使用使用任何.NET语言,如C#和Visual Basic(VB)。ClosedXML允许您在不使用Excel的情况下创建Excel 2007/2010文件应用典型的示例是在web上创建Excel报表服务器:var工作簿=新XLWorkbook();var worksheet=workbook.Worksheets.Add(“样本表”);worksheet.Cell(“A1”).Value=“Hello World!”;工作簿.另存为(“HelloWorld.xlsx”);