C # и Microsoft.Office.Interop.Excel - Как заменить формулу ее значением? - PullRequest
1 голос
/ 23 ноября 2010

Я пытаюсь заменить формулы в столбце D их значениями.

например.в настоящее время D1 = C1 / 2

Если C1 = 10, я хочу, чтобы D1 был 5

Мне нужно сделать это, потому что мне нужно удалить столбец C.

Iпопытался изменить формат на текст, как показано ниже, но, похоже, он не заменяет формулы их значениями

  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;

Ответы [ 3 ]

1 голос
/ 23 ноября 2010

Вот макрос в VBA, который делает то, что вам нужно ... Это код 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

Еще один способ сделать это - просто скопировать команду Paste Special -> Values. Я только что записал макрос, который это делает (C5 в моем примере - это ячейка, содержащая функцию)

Sub Macro1()
    Range("C5").Select
    Selection.Copy
    Range("D5").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
End Sub
1 голос
/ 23 ноября 2010

Как вы форматируете комментарий ??

Вот решение, которое я получил, благодаря Лоренцо

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();
}
0 голосов
/ 23 ноября 2010

Вы не можете просто изменить стиль отображения, потому что это не меняет содержимое ячейки. Когда вы делаете это вручную в Excel, вам нужно скопировать столбец, а затем выбрать «Специальная вставка» -> «Значения», чтобы вставить значения, а не формулы. Я предполагаю, что есть программный способ сделать ту же самую операцию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...