2010-11-22 16 views
1

J'essaie de remplacer les formules de la colonne D par leurs valeurs.C# et Microsoft.Office.Interop.Excel - Comment remplacer une formule par sa valeur?

par ex. actuellement D1 = C1/2

Si C1 = 10, je veux D1 à être 5

Je dois faire cela parce que je dois supprimer la colonne C.

J'ai essayé de changer le format du texte comme ci-dessous, mais il ne semble pas remplacer les formules avec leurs valeurs

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; 

Répondre

1

est ici une macro VBA qui fait ce que vous avez besoin ... Il est code VB mais je ne pense pas que woould un problème de le traduire en 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 

Une autre façon de le faire est de simplement imiter la commande Collage spécial -> Valeurs. Je viens d'enregistrer une macro qui le fait (C5 dans mon échantillon est une cellule qui contient une fonction)

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

Merci, mais Je ne comprends pas ... Que retourne l'InputBox? Et je ne pense pas que rRange = rRange.Value fonctionnera jamais en C#. – Aximili

+0

InputBox retournera simplement un objet Range. L'utilisateur peut y écrire quelque chose comme 'C3',' C3: D4' et ainsi de suite ... Quoi qu'il en soit, le deuxième exemple vous montre comment imiter la commande Collage spécial. Pourquoi pensez-vous que ça ne marchera pas avec C#? – Lorenzo

+0

Oh merci d'avoir créé cette macro pour moi ... Désolé, je n'ai aucune idée de la façon de le traduire en C#. Les objets semblent être très différents. – Aximili

0

Vous ne pouvez pas changer le style d'affichage, car cela ne change pas le contenu de la cellule. Lorsque vous le faites manuellement dans Excel, vous devez copier la colonne, puis choisissez Collage spécial -> Valeurs pour coller les valeurs plutôt que les formules. J'imagine qu'il y a une manière programmatique de faire la même opération.

1

Comment formater un commentaire ??

Voici la solution que je suis arrivé, grâce à 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); 
} 

Ceci est une autre façon de le faire (C1 contient une formule, le résultat est placé dans 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(); 
} 
Questions connexes