从c#导出到Excel,并在Excel公式中添加另一列

我想导出我的DataGridView的内容到Excel ,我有代码做到这一点,但是我想要的是它添加一个Excel Formula的额外列

到目前为止,我有这个代码

 private void button1_Click_1(object sender, EventArgs e) { Microsoft.Office.Interop.Excel._Application app = new Microsoft.Office.Interop.Excel.Application(); Microsoft.Office.Interop.Excel._Workbook workbook = app.Workbooks.Add(Type.Missing); Microsoft.Office.Interop.Excel._Worksheet worksheet = null; app.Visible = true; worksheet = workbook.Sheets["Sheet1"]; worksheet = workbook.ActiveSheet; worksheet.Name = "Testing this"; for (int i = 1; i < dataGridView2.Columns.Count + 1; i++) { worksheet.Cells[1, i] = dataGridView2.Columns[i - 1].HeaderText; } for (int i = 0; i < dataGridView2.Rows.Count - 1; i++) { for (int j = 0; j < dataGridView2.Columns.Count; j++) { worksheet.Cells[i + 2, j + 1] = dataGridView2.Rows[i].Cells[j].Value.ToString(); } } workbook.SaveAs("c:\\output.xlsx", Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlExclusive, Type.Missing, Type.Missing, Type.Missing, Type.Missing); app.Quit(); } 

我不确定如何去添加公式列,任何帮助将不胜感激。

谢谢!

你可以简单地使用你想要添加公式的范围的.Formula属性,但是如果你引用了其他单元格(很可能),那么.FormulaR1C1真的很好,因为它可以让你根据它们的相对位置来引用单元格比试图找出行/列是什么。

在上面的例子中,这将添加一个公式作为最后一列,并从左边的第二列的值,并乘以两:

 int formulaCol = dataGridView2.Columns.Count + 1; for (int i = 0; i < dataGridView2.Rows.Count - 1; i++) { for (int j = 0; j < dataGridView2.Columns.Count; j++) { worksheet.Cells[i + 2, j + 1] = dataGridView2.Rows[i].Cells[j].Value.ToString(); } worksheet.Cells[i + 2, formulaCol].FormulaR1C1 = "=R[0]C[-2]*2"; } 

R[0]表示当前行。 R1将是一行,而R[-1]将是一行。

– 编辑11/28/17 –

根据你的评论,这是一个巧妙的把戏,把标准公式转换成R1C1,而不需要任何脑力。 按原样键入您的公式。 进入文件 – >选项 – >公式,然后选中标有“R1C1公式”的选项卡。 它会将你的普通公式转换为R1C1,并且便于在你的代码中使用这个公式。

最酷的是当你复制/粘贴公式时,你会注意到它不会像正常的A1风格那样改变。

所以,在你的例子中,如果我把你的公式放到J7中,它会变成:

= IF(ISNA(MATCH(R [-5] C [-9],C [-7],0)), “”,INDEX(C [-7],MATCH(R [-5] C [-9 ],C [-7],0)))

这当然是不对的,因为它完全取决于你最初input标准公式的单元格。

因此,像平常一样input它,更改为R1C1,并将其用于C#代码。

在这里输入图像说明