C#和Microsoft.Office.Interop.Excel – 如何用它的值replace一个公式?

我试图用它们的值replaceD列上的公式。

例如。 目前D1 = C1 / 2

如果C1 = 10,我想D1是5

我需要这样做,因为我需要删除列C.

我尝试将格式更改为像下面的文本,但它似乎并没有用它们的值replace公式

Excel.Style style = workbook.Styles.Add("styleText", Missing.Value); style.NumberFormat = "@"; Excel.Range range = (Excel.Range)sheet.get_Range("D1", Missing.Value); range.Style = style; 

这里有一个在VBA中的macros,你需要做什么…这是VB代码,但我不认为这是一个问题来翻译它在C#

 Sub ValuesOnly() Dim rRange As Range On Error Resume Next Set rRange = Application.InputBox(Prompt:="Select the formulas", Title:="VALUES ONLY", Type:=8) If rRange Is Nothing Then Exit Sub rRange = rRange.Value End Sub 

另一种方法是简单地模仿“粘贴特殊 – >值”命令。 我刚刚录制了一个macros(我的示例中的C5是一个包含函数的单元格)

 Sub Macro1() Range("C5").Select Selection.Copy Range("D5").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False End Sub 

你如何格式化评论?

这是我得到的解决scheme,感谢洛伦佐

 private static void ReplaceFormulasWithValues(ref Excel.Worksheet sheet, char column) { Excel.Range range = (Excel.Range)sheet.get_Range(column + "1", Missing.Value).EntireColumn; range.Copy(Missing.Value); range.PasteSpecial(Microsoft.Office.Interop.Excel.XlPasteType.xlPasteValues, Microsoft.Office.Interop.Excel.XlPasteSpecialOperation.xlPasteSpecialOperationNone, false, false); } 

这是另一种方法(C1包含一个公式,结果放在D1中)

 static void Main( string[] args ) { string fileName = @"D:\devprj\Temp\TempProject\bin\Debug\Cartel1.xlsx"; Application ac = new Application(); Workbook wb = ac.Workbooks.Open( fileName ); Worksheet ws = wb.Sheets[1]; Range rangeOrigin = ws.get_Range( "C1" ); Range rangeDestination = ws.get_Range( "D1" ); rangeDestination.Value = rangeOrigin.Value2; wb.Save(); } 

你不能只是改变显示样式,因为这不会改变单元格的内容。 当您在Excel中手动执行此操作时,您需要复制该列,然后select“select性粘贴” – >“值”来粘贴值而不是公式。 我想有一个程序化的方式来做同样的操作。