Vous savez comment lorsque vous copiez des cellules dans Excel d'une cellule à l'autre et la formule remplace automatiquement quelque chose comme =Sum(A1+$B1)
à =Sum(C1+$B1)
?Comment puis-je prédire l'emplacement de la cellule suivante? (Écriture du Grand Total)
Je me demandais comment réaliser quelque chose de similaire, sauf par programmation.
C'est ce que j'essaie d'atteindre, j'ai une table avec dis, le revenu d'une place pour les lignes et l'élément pour les colonnes, ce sont des données pré-pivotées au cas où vous vous poseriez, et je veux compléter avec un total général, qui est initialement manquant.
Place | Beans | Buns | Breads | etc
Bobby's | 550 | 20 | 30 | 10
Sen's | 550 | 20 | 30 | 10
Solaire's | 550 | 20 | 30 | 10
Maintenant, je vais d'écrire une ligne supplémentaire ci-dessous le dernier, et une colonne supplémentaire à côté du dernier, intitulé [Grand total]. Donc, je suppose que je vais avoir besoin d'une boucle for pour traverser cette dernière rangée que je vais générer. Quelque chose comme ceci:
For (int i = 2; i < numberofColumns; i++) {
string query = "=Sum(? : ?)"
xlsWorksheet.Cells[ numberofRows + 1 , i].Formula = query;
}
Comme vous pouvez le voir, je ne sais pas comment gérer les emplacements de cellules implicites. La partie délicate est que je veux que cet algorithme boucle jusqu'à la fin sans devoir implicitement définir une cellule spécifique. C'est parce que je peux avoir n'importe quel nombre de colonnes supplémentaires, ou n'importe quel nombre de rangées supplémentaires entre les deux. La partie importante est que je devrais créer la ligne et la colonne Grand total.
Un résultat souhaité serait:
Place | Beans | Buns | Breads | etc | GrandTotal
Bobby's | 550 | 20 | 30 | 10 | 610
Sen's | 550 | 20 | 30 | 10 | 610
Solaire's | 550 | 20 | 30 | 10 | 610
| 1650 | 60 | 90 | 30 | 1830
À l'heure actuelle, cela se fait en C# cibler un document Excel avec Excel Interop. Je comprends que cela peut également être fait dans les formules VBA ou Excel, donc je vais taguer les deux à ce poste. La formule elle-même fera plus que simplement sommer les lignes, mais je ne peux pas comprendre comment prédire l'emplacement de la cellule suivante.
De la même façon exacte que vous le feriez en VBA: en suivant où vous avez commencé et ce que la dernière ligne et colonne les données sont. BTW 'query' est un nom terrible pour une chaîne contenant une formule' SUM', * en particulier * dans C# où 'query' est un nom couramment utilisé pour un objet' IQueryable '. –
Si vous n'écrivez pas les données vous-même, vous devez "trouver la dernière ligne/colonne dans une plage", et c'est un problème résolu pour lequel vous pouvez facilement trouver une solution. –
Enfin, si vos données sont "pré-pivotées", alors pourquoi n'est-ce pas dans un tableau croisé dynamique, qui peut assez facilement calculer ces totaux pour vous? Exactement ce que signifie «fera plus que simplement additionner les lignes»? Vos exemples (y compris la partie '" = Sum (?:?) "') Impliquent tous une somme directe. –