web-dev-qa-db-de.com

Hinzufügen einer Formel zu Excel mit C # - so wird die Formel angezeigt

Ich wollte Formeln zu einem Excel-Arbeitsblatt hinzufügen.
Das ist mir mit der Formula -Eigenschaft gelungen.

Das Problem ist, dass wenn ich das Arbeitsblatt in Excel öffne, ich sehe, dass die Formel funktioniert - aber ich kann nur das Ergebnis in der Zelle sehen. Die in der Formelleiste oben in Excel berechnete Formel wird nicht angezeigt.

Wenn ich eine Formel in Excel selbst eingebe, kann ich das Ergebnis in der Zelle und die Formel in der Formelleiste sehen.

Einige meiner Codes: 

for (int i = 0; i < nOfColumns / 3; i++)
{
    Range cells = workSheet.Range[workSheet.Cells[2, i * 3 + 3], workSheet.Cells[lastRowNumber, i * 3 + 3]];
    cells.FormulaR1C1 = "=IF(EXACT(RC[-2],RC[-1]),TRUE,ABS(RC[-2]/RC[-1]-1))";
}

unten ist ein Testcode. Auch nachdem ich die Arbeitsmappe gespeichert habe - das FormulaHidden ist falsch und ich kann die eingesetzte Formel erfolgreich abrufen. wirklich frustriert

        Microsoft.Office.Interop.Excel.Application excelApp = null;
        Workbooks workBooks = null;
        Workbook workBook = null;
        Worksheet workSheet;

        try
        {

            excelApp = new Microsoft.Office.Interop.Excel.Application();
            excelApp.DisplayAlerts = false;

            workBooks = excelApp.Workbooks;
            workBook = workBooks.Open(filePath, AddToMru: false);
            workSheet = workBook.Worksheets.get_Item(1);

            int nOfColumns = workSheet.UsedRange.Columns.Count;
            int lastRowNumber = workSheet.UsedRange.Rows.Count;

            Range rng = workSheet.Range["C1"];
            rng.Formula = "=SUM(B2:B4)";
            String formula = rng.Formula; //retrieve the formula successfully

            rng.FormulaHidden = false;
            workSheet.Unprotect();

            workBook.SaveAs(filePath, AccessMode: XlSaveAsAccessMode.xlExclusive);

            formula = rng.Formula;  //retrieve the formula successfully
            bool hidden = rng.FormulaHidden;

        }
        catch (Exception e)
        {
            throw;
        }
        finally
        {
            if (workBook != null)
            {
                workBook.Close();
                workBook = null;
            }
            if (workBooks != null)
            {
                workBooks.Close();
                workBooks = null;
            }
            if (excelApp != null)
            {
                excelApp.Quit();
                excelApp = null;
            }
        }
    }

Jeder weiß, wie man die angezeigte Formel erstellt, wenn er die Formeln programmatisch hinzufügt ?

9
Amico

endlich !!! herausgefunden. Dieses Verhalten wird durch die SaveAs-Flags verursacht. geändert 

workBook.SaveAs (filePath, AccessMode: XlSaveAsAccessMode.xlExclusive);

zu 

workBook.SaveAs (filePath, AccessMode: XlSaveAsAccessMode.xlShared);

jetzt bleibt nur noch zu verstehen, was genau der Unterschied zwischen den beiden Flaggen ist. :)

3
Amico

Wenn Sie die Formel ausblenden (indem Sie das Kontrollkästchen Ausgeblendet im Dialogfeld Zellen formatieren aktivieren) und das Arbeitsblatt (danach) schützen, wird die Formel nicht in der Formelleiste angezeigt.

Beispiel VBA-Code

Range("C1").FormulaHidden = True    'set this property to false to make formula visible.
Sheet1.Protect

BEARBEITEN: Um die Formel in der Formelleiste anzuzeigen

Range("C1").FormulaHidden = False
Sheet1.Unprotect
1
shahkalpesh

Ich denke, die Lokalisierung könnte an diesem seltsamen Verhalten beteiligt sein.

Bei der Arbeit mit Excel hatte ich vor einiger Zeit den Eindruck, dass Formeln in lokaler Sprache gespeichert wurden (ich habe Italienisch verwendet), und dann beim Konvertieren eine Konvertierung durchlaufen. Dies kann sinnvoll sein, da lokalisierte Konstanten ein wesentlicher Bestandteil der Tabellendaten sind.

Es tut mir leid, dass ich jetzt kein Excel zur Verfügung habe, daher kann ich nicht genauer sein, aber ich denke, Sie könnten versuchen, Ihre Tabelle in Englisch zu lokalisieren oder den Formeltext in Ihrer Landessprache festzulegen.

0
CapelliC

Gehen Sie in der Symbolleiste zur Registerkarte Formel und klicken Sie auf "Formeln anzeigen".

enter image description here

0
BG100