Comment insérer avant la ligne dans le SDK OpenXml SpreadsheetDocument Table?
Mon insérer, après la ligne de code:
using (var spreadSheet = SpreadsheetDocument.Open(memoryStream, true, openSettings))
{
var worksheet = GetWorksheet(spreadSheet);
var worksheetPart = worksheet.WorksheetPart;
var sheetData = worksheetPart.Worksheet.GetFirstChild<SheetData>();
var newRowIndex = 9;
foreach (var item in Items)
{
newRowIndex++;
var newRow = new Row()
{
RowIndex = (uint)newRowIndex
};
var lastRow = sheetData.Elements<Row>().LastOrDefault(l => l.RowIndex == newRowIndex - 1);
sheetData.InsertAfter(newRow, lastRow);
}
worksheet.Save();
}
Et mon modèle de rapport excel:
Ce code fonctionne très bien, mais le résultat n'est pas correct. Le problème est que les nouvelles lignes à insérer avant le 9ème de ligne.
Comment puis-je résoudre ce problème?
suivez ce lien stackoverflow.com/questions/12657611/...
Veer B. Singh, je ne suis pas problème de l'insertion de la ligne,et votre commentaire pour un problème!!!Mon problème dernière ligne avant la ligne d'insertion et changé au dernier rang de l'indice de...
Veer B. Singh, je ne suis pas problème de l'insertion de la ligne,et votre commentaire pour un problème!!!Mon problème dernière ligne avant la ligne d'insertion et changé au dernier rang de l'indice de...
OriginalL'auteur Elyor | 2013-04-29
Vous devez vous connecter pour publier un commentaire.
Vous n'allez pas comme ça... Le problème, c'est que vous avez les lignes 9 et 11 dans votre modèle. Vous devez définir correctement, comme dans leur RowIndex doivent être mis à jour, et l'enfant de Cellules éléments de éléments de Ligne avoir leur CellReference propriété (ainsi que CellFormula si vous en avez) corrigé.
Dire que vous avez 6 nouveaux éléments. Puis ligne 9 devient la ligne 15. Et la cellule A9 dans le "vieux", ligne 9 être mis à jour à A15. J'ai donné le code qui effectue la mise à jour de la RowIndex et CellReference mais il n'est pas infaillible. VOUS AVEZ ÉTÉ PRÉVENU.
Également noter que j'ai changé l'indice de départ de 9 à 8. C'est parce que le code incréments de première (newRowIndex++) avant de faire la InsertAfter(). Oh vous allez comprendre...
Aussi, je suis la mise à jour de la ligne 11 de la première avant de la rangée 9 parce que j'ai peur de collisions. Si vous avez 2 nouveaux éléments, et vous mettez à jour la ligne 9 d'abord, il devient la ligne 11. Et puis, vous avez deux ligne 11. Alors, qui était à l'origine de la ligne 11? Dans ces cas, lors de l'augmentation de la ligne d'indices, de commencer avec le rang le plus élevé de RowIndex.
Worksheet
.Et parce que le non-remplacement d'
RowIndex
dansSheetDate
.OriginalL'auteur Vincent Tan
OK!!!,merci à tous et je les succès de cette Question pour répondre à la EPPlus
Par exemple:
Ouais!,pourtant simples EPPlus lib.Et c'est écrire OpenXML structure avec WindowsBase & IO Paquets.
OriginalL'auteur Elyor
Vous pouvez également utiliser OpenXML SDK pour cela, mais vous devez MANUELLEMENT le décalage vers le bas de toutes les lignes en dessous de l'insertion de la ligne avant l'insertion.
Exemples utiles ici et ici.
Mais dans le EPPlus il est moins compliqué et moins de code
OriginalL'auteur Rafael Seidalinov