2010-11-22 2 views
1

Ich versuche, Formeln in Spalte D durch ihre Werte zu ersetzen.C# und Microsoft.Office.Interop.Excel - Wie man eine Formel durch ihren Wert ersetzt?

z. zur Zeit D1 = C1/2

Wenn C1 = 10, mag ich D1 5 seine

ich brauche, dies zu tun, weil ich die Spalte C.

ich das Format versucht löschen muß Wechsel in Text wie unten, aber es scheint nicht, Formeln mit ihren Werten

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; 

Antwort

1

Hier ist ein Makro in VBA, das tut, was Sie brauchen ... Es VB-Code, aber ich denke nicht, ein Problem sein woould es in 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 

Ein anderer Weg, zu übersetzen, es zu tun ist, die einfach zu imitieren Befehl Einfügen Spezial -> Werte. Ich habe gerade ein Makro aufgezeichnet, das tut es (C5 in meinem Beispiel ist eine Zelle, die eine Funktion enthält)

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

Danke, aber Ich verstehe nicht ... Was gibt die InputBox zurück? Und ich denke nicht, dass rRange = rRange.Value jemals in C# funktioniert. – Aximili

+0

Die InputBox gibt einfach ein Range-Objekt zurück. Der Benutzer kann dort etwas wie "C3", "C3: D4" und so weiter schreiben ... Wie auch immer, das zweite Beispiel zeigt Ihnen, wie Sie den Befehl "Einfügen Spezial" nachahmen können. Warum denkst du, dass das nicht mit C# funktioniert? – Lorenzo

+0

Danke, dass du dieses Makro für mich erstellt hast ... Tut mir leid, ich habe keine Ahnung, wie ich es in C# übersetzen soll. Die Objekte scheinen sehr unterschiedlich zu sein. – Aximili

0

Sie können den Anzeigestil ändern nicht nur zu ersetzen, weil dies nicht den Inhalt der Zelle ändern. Wenn Sie dies manuell in Excel tun, müssen Sie die Spalte kopieren und dann auf Einfügen Spezial -> Werte klicken, um die Werte anstelle der Formeln einzufügen. Ich kann mir vorstellen, dass es eine programmatische Möglichkeit gibt, dieselbe Operation durchzuführen.

1

Wie formatieren Sie einen Kommentar ??

Hier ist die Lösung, die ich bekam, dank Lorenzo

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); 
} 

Dies ist ein weiterer Weg, es zu tun ist (C1 eine Formel enthält, wird das Ergebnis in D1 platziert)

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(); 
}