先制作一个简单的Excel文件作为模板,为了防止要填充的Cell中的内容和标题的内容一样,所以要填充内容的Cell中的内容是“$” + 字段名(要和DataTable中的列名一致),效果如图:

创建一个Winform程序,给窗体上添加两个按钮,代码分别为:
创建Xml:
提取xml并且加载到Excel模板上,再另存:
private
void button2_Click(
object sender, EventArgs e)
{
DataSet ds = new DataSet();
ds.ReadXml(Application.StartupPath + "\\ExcelBindingXml.xml");

Excel.Application m_objExcel = null;

Excel._Workbook m_objBook = null;

Excel.Sheets m_objSheets = null;

Excel._Worksheet m_objSheet = null;

Excel.Range m_objRange = null;

object m_objOpt = System.Reflection.Missing.Value;

try
{

m_objExcel = new Excel.Application();
m_objBook = m_objExcel.Workbooks.Open(Application.StartupPath + "\\ExcelTemplate.xls", m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt);
m_objSheets = (Excel.Sheets)m_objBook.Worksheets;
m_objSheet = (Excel._Worksheet)(m_objSheets.get_Item(1));

foreach (DataRow dr in ds.Tables[0].Rows)
{
for (int col = 0; col < ds.Tables[0].Columns.Count; col++)
{
for (int excelcol = 1; excelcol < 8; excelcol++)
{
for (int excelrow = 1; excelrow < 5; excelrow++)
{
string excelColName = ExcelColNumberToColText(excelcol);
m_objRange = m_objSheet.get_Range(excelColName + excelrow.ToString(), m_objOpt);

if ( m_objRange.Text.ToString().Replace("$","") == ds.Tables[0].Columns[col].ColumnName )
{
m_objRange.Value2 = dr[col].ToString();
}
}

}
}
}
m_objExcel.DisplayAlerts = false;
m_objBook.SaveAs(Application.StartupPath + "\\ExcelBindingXml.xls", m_objOpt, m_objOpt,
m_objOpt, m_objOpt, m_objOpt, Excel.XlSaveAsAccessMode.xlNoChange,

m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt);

}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
m_objBook.Close(m_objOpt, m_objOpt, m_objOpt);
m_objExcel.Workbooks.Close();
m_objExcel.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(m_objBook);
System.Runtime.InteropServices.Marshal.ReleaseComObject(m_objExcel);
m_objBook = null;
m_objExcel = null;
GC.Collect();
}
}
下面是一个辅助函数,主要是将整数的列序号转换到Excel用的以字母表示的列号,Excel最大列数为255。
运行完成后,生成的Excel如下图: