如何使用C#创建Excel电子表格而不需要在运行代码的计算机上安装Excel?
当前回答
一个非常轻量级的选项可能是使用HTML表。只需在文件中创建head、body和table标记,然后将其另存为扩展名为.xls的文件。您可以使用Microsoft特定的属性来设置输出样式,包括公式。
我意识到,您可能没有在web应用程序中对此进行编码,但这里有一个通过HTML表组成Excel文件的示例。如果您正在编写控制台应用程序、桌面应用程序或服务,则可以使用此技术。
其他回答
我正在使用以下代码创建excel 2007文件,该文件创建了该文件并写入该文件,但当我打开该文件时,它给我的错误是exel无法打开文件bcz文件可能已损坏或文件扩展名不兼容。但如果我使用.xls作为文件,它可以工作
for (int i = 0; i < TotalFile; i++)
{
Contact.Clear();
if (innerloop == SplitSize)
{
for (int j = 0; j < SplitSize; j++)
{
string strContact = DSt.Tables[0].Rows[i * SplitSize + j][0].ToString();
Contact.Add(strContact);
}
string strExcel = strFileName + "_" + i.ToString() + ".xlsx";
File.WriteAllLines(strExcel, Contact.ToArray());
}
}
也参考链接
http://dotnet-magic.blogspot.in/2011/10/createformat-excel-file-from-cnet.html
http://www.codeproject.com/KB/cs/Excel_and_C_.aspx<=为什么不使用内置的windows功能,只需在服务器上安装office,您安装的任何应用程序都可以自动化。
使用本机方法就容易多了。
如果安装了它,你就可以使用它,这是windows中最棒、使用率最低的功能,在过去的好日子里,它被称为COM,它为你节省了大量时间和痛苦。
或者更简单地使用ref lib MS供应品-http://csharp.net-informations.com/excel/csharp-create-excel.htm
Java开源解决方案是Apache POI。也许这里有一种设置互操作的方法,但我对Java的了解不够,无法回答这个问题。
当我探索这个问题时,我最终使用了互操作程序集。
实际上,您可能想查看C#中可用的互操作类(例如Microsoft.Office.interop.Excel)。您可以说没有OLE(这不是),但互操作类非常容易使用。在这里查看C#文档(Interop for Excel从C#PDF的第1072页开始)。
如果你没有尝试过,你可能会印象深刻。
请注意Microsoft对此的立场:
Microsoft当前不建议也不支持,从任何无人值守、,非交互式客户端应用程序或组件(包括ASP,ASP.NET、DCOM和NT服务),因为Office可能表现出不稳定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!");
}