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 ?
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. :)
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
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.
Allez sur l'onglet Formule dans la barre d'outils, puis cliquez sur "Afficher les formules".