C#生成Excel文件的方法

1. 首先添加Excel的Reference到项目中
右击项目的References,选“Add Reference...”菜单,在COM组里选择“Microsoft Excel 11.0 Object Labrary”(安装的Excel版本不一样这里的版本可能会有变化,我这里是Excel 2003)

2. 新建excel文件实例代码
Microsoft.Office.Interop.Excel.Application app = null;
Microsoft.Office.Interop.Excel.Workbook workbook = null;
Microsoft.Office.Interop.Excel.Worksheet sheet = null;
object missing = System.Reflection.Missing.Value;
try
{
app = new Microsoft.Office.Interop.Excel.Application();
app.Visible = false;        // 不显示,仅后台生成
workbook = app.Workbooks.Add(true); // 如果打开已存在文件,这里用Open,保存使用Save
// 添加sheet的方法
workbook.Worksheets.Add(missing, missing, missing, missing);
// 修改sheet名的方法,注意sheet的下标从1开始
sheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets[1];
sheet.Name = "new sheet name";
// 这里给sheet填充内容部分略
// 如果文件已经存在又不想让“是否替换”的提示窗体显示出来,需要先调用File.Delete来删除文件
workbook.SaveAs(filename, missing, missing, missing, missing, missing,
Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlExclusive, missing, missing,
missing, missing, missing);
workbook.Close(false, missing, missing);
app.Quit();
workbook = null;
app = null;
GC.Collect();
}
catch (Exception ex)
{
if (app != null)
{
app.Quit();
app = null;
GC.Collect();
}
}

3. 设置单个单元格的内容和属性
Microsoft.Office.Interop.Excel.Range range;
range = sheet.get_Range(sheet.Cells[1, 1], sheet.Cells[1, 1]);        // 注意cell的下标从1开始
range.Value2 = "value";        // 设置内容
range.Font.Bold = true;        // 粗体
range.HorizontalAlignment = Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignRight;  // 对齐方式

4. 一个个单元格的填充内容很费时间,解决办法是先填充一个内存Array,然后把Array赋给sheet的对应区域

Microsoft.Office.Interop.Excel.Range range;
Array arr = Array.CreateInstance(typeof(object), 行数, 列数);
// 不断的调用下面的的函数填充array中的内容
arr.SetValue(单元格内容, 行, 列);    // 行,列均从0开始
// 设置字体和大小
range = sheet.get_Range(sheet.Cells[1, 1], sheet.Cells[rowCount, columnCount]);
range.Font.Name = "Arial";
range.Font.Size = 10;
// 设置array数据,注意选择的行数和列数要与array行数和列数对应
sheet.get_Range(sheet.Cells[1, 1], sheet.Cells[rowCount, columnCount]).Value2 = arr;
// 设置单元格的wrap text属性
sheet.get_Range(sheet.Cells[2, 4], sheet.Cells[2, 6]).WrapText = true;
// 设置单元格的数据格式
sheet.get_Range(sheet.Cells[3, 4],
sheet.Cells[3, 6]).NumberFormat = "#,##0.00";
// 设置自动调整列宽
sheet.get_Range(sheet.Cells[1, 1], sheet.Cells[rowCount, columnCount]).EntireColumn.AutoFit();

Tags:

Leave a Reply


提醒: 评论者允许使用'@user空格'的方式将自己的评论通知另外评论者。例如, ABC是本文的评论者之一,则使用'@ABC '(不包括单引号)将会自动将您的评论发送给ABC。请务必注意user必须和评论者名相匹配(大小写一致)。