对于此解决方案,我假设您将在安装了 Excel 的 PC 上运行它。
首先,添加对 library 的引用Microsoft.Office.Interop.Excel
。然后,使用它的命名空间:
using Excel = Microsoft.Office.Interop.Excel;
请注意,由于它是 COM 互操作,因此您需要保留对该库中对象的每个引用,以便使用 Marshal 从内存中正确释放它们。这是使用 .NET 项目中的 COM 互操作对象的黄金法则。有关更多信息,请在此处阅读:如何正确清理 Excel 互操作对象?
所以,这是另一个重要的导入:
using System.Runtime.InteropServices;
我不知道您是如何填写此表格的,但我假设括号中的每个数据都有一个字段:{CITY}、{NUM_I1} 等等。
因此,在您的表单提交中,您可以从您的输入中创建一个字典:
Dictionary<string, string> replacing = new Dictionary<string, string>();
replacing.Add("{CITY}",txtCity.Text);
...
然后,填写工作簿:
//Opening Excel Application with desirable template Workbook
//and instantiating the desirable Worksheet and Range
Excel.Application xlApplication = new Excel.Application();
Excel.Workbooks xlWorkbooks = xlApplication.Workbooks;
Excel.Workbook xlWorkbook = xlWorkbooks.Open(templateFilename, ReadOnly: true);
Excel.Sheets xlSheets = xlWorkbook.Sheets;
Excel.Worksheet xlWorksheet = (Excel.Worksheet)xlSheets[sheetNameOrIndex];
Excel.xlFirstCell = xlWorksheet.Cells[firstRow, firstCol];
Excel.xlLastCell = xlWorksheet.Cells[lastRow, lastCol];
Excel.Range xlRange = xlWorksheet.Cells[xlFirstCell, xlLastCell];
//all of the replacing
foreach (string key in replacing.Keys)
xlRange.Replace(key, replacing[key]);
//saving
xlWorkbook.SaveAs(newFilename);
//important part: releasing references
Marshal.ReleaseComObject(xlRange);
Marshal.ReleaseComObject(xlFirstCell);
Marshal.ReleaseComObject(xlLastCell);
Marshal.ReleaseComObject(xlWorksheet);
Marshal.ReleaseComObject(xlSheets);
xlWorkbook.Close(SaveChanges: false);
Marshal.ReleaseComObject(xlWorkbook);
Marshal.ReleaseComObject(xlWorkbooks);
xlApplication.Exit();
Marshal.ReleaseComObject(xlApplication);
我已经使用 c# 4.0. 如果您需要它在不支持可选参数的 Visual Studio 2008 或更早版本下进行开发,您只需将Type.Missing
您不想在 Excel 库方法(Workbooks.Open和Range.Replace)下使用的参数传递给它。