2010-10-23 15 views
3

J'ai utilisé la méthode AutoFilter() sans problème jusqu'à présent. mais je n'étais pas capable de marquer ou d'obtenir la plage des lignes filtrées, de les compter/copier/supprimer.Comment copier les lignes filtrées par la méthode AutoFilter()

J'ai vu beaucoup de messages sur ce problème avec VBA, mais aucun pour C#.

Après filtration, j'ai essayé de la gamme par l'une de ces lignes:

range = ws.UsedRange.CurrentRegion.SpecialCells(Excel.XlCellType.xlCellTypeVisible, missing); 
range = ws.AutoFilter.Range.SpecialCells(Excel.XlCellType.xlCellTypeVisible, missing); 
range = ws.Cells.SpecialCells(Excel.XlCellType.xlCellTypeVisible, missing); 

et moi avons même essayé d'autres moyens que je me souviens même pas DonT.

Après avoir marqué la plage j'ai essayé de compter les lignes en faisant:

range.Rows.Count 

et dans chaque cas, je suis le nombre total de lignes de la feuille, parfois je suis 65536 (bureau 2003) et parfois juste 1 mais sûrement pas le nombre de lignes que j'ai filtré.

je dois l'utiliser avec Office 2003 avec la bibliothèque d'objets 11.

Répondre

1

Ok. après un long sommeil. J'ai eu le pouvoir d'essayer plus de directions, cette fois sans obtenir les directions d'autres forums et google.

Essayez ceci:

  • Appliquer le filtre automatique sur la plage utilisée de l'ensemble FEUILLE DE TRAVAIL

Excel.Range gamme = workSheet.UsedRange;

  • Appliquer le filtre automatique sur la gamme
range.AutoFilter(1, criteriaString , Excel.XlAutoFilterOperator.xlAnd, missing, true); 

(cela va filtrer les lignes conformément à la colonne 1 avec criteriaString que les critères)

  • Maintenant vous voulez obtenir la gamme filtrée:
  • pour compter les lignes
Excel.Range filteredRange = range.SpecialCells(Microsoft.Office.Interop.Excel.XlCellType.xlCellTypeVisible, missing); 
  • Maintenant, vous pouvez accéder filteredRange.Rows.Count entier, et faire des choses amusantes.

THATS IT! ça devait être simple alors je pensais que ce serait le cas.

Merci

0

après autofilter, je voudrais citer un terme « COGI » que dans la gamme « N » dans les lignes filtrées.comment écrire simplement prendre cette gamme « N » et insérez un terme « COGI »

0

Pour supprimer les lignes, il est juste range.Delete(Microsoft.Office.Interop.Excel.XlDeleteShiftDirection.xlShiftUp);

+0

Auteur demande de réponse à copier les lignes. – Max