web-dev-qa-db-fra.com

Ajouter une formule à Excel avec C # - la formule affichée

Je voulais ajouter des formules à une feuille de calcul Excel.
J'ai réussi à le faire avec la Formula property.

Le problème est que lorsque j'ouvre la feuille de calcul dans Excel, je peux voir que la formule fonctionne - mais je ne peux voir que le résultat dans la cellule. Je ne vois pas la formule calculée dans la barre de formule en haut d'Excel.

Évidemment, si je saisis une formule dans Excel, je peux voir le résultat dans la cellule et la formule dans la barre de formule.

Certains de mes 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))";
}

ci-dessous est un code de test. même après avoir sauvegardé le classeur, FormulaHidden est false et je peux récupérer avec succès la formule insérée. vraiment frustré

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

Quelqu'un sait comment faire la formule affichée, lors de l'ajout de formules par programme ?

9
Amico

enfin !!! deviner. Ce comportement est dû aux indicateurs SaveAs. modifié 

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

à 

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

maintenant, il ne reste plus qu'à comprendre quelle est la différence entre les deux drapeaux. :)

3
Amico

Si vous masquez la formule (en cochant la case Masqué dans la boîte de dialogue Formatage des cellules) et en protégeant la feuille de calcul (par la suite), la formule ne s'affichera pas dans la barre de formule.

Exemple de code VBA

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

EDIT: afin de voir la formule dans la barre de formule

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

Je pense que la localisation pourrait être impliquée dans ce comportement étrange.

Il y a quelque temps, travaillant dans Excel, j'avais l'impression que les formules étaient stockées dans une langue localisée (j'utilisais l'italien), puis étaient converties lors de la compilation. Cela peut avoir un sens, car les constantes localisées sont une partie essentielle des données de la feuille de calcul.

Je suis désolé de ne pas avoir maintenant d’Excel disponible, je ne peux donc pas être plus précis, mais je pense que vous pourriez essayer de localiser votre feuille de calcul en anglais ou de définir le texte de la formule dans votre langue.

0
CapelliC

Allez sur l'onglet Formule dans la barre d'outils, puis cliquez sur "Afficher les formules".

enter image description here

0
BG100