2016-06-03 10 views
0

Wie wählen Sie einen Bereich basierend auf den "Seiten" -Rändern aus, die in "Seitenumbruchansicht" in Excel definiert sind?Auswählen und Kopieren des Seitenbereichs aus dem Arbeitsblatt

Ich habe eine .xlsx mit einem Arbeitsblatt, das 6 Bereich definiert hat "Seiten" (möglicherweise als der Druckbereich bezeichnet?). Basierend auf Daten, die in einer SQL-Tabelle enthalten sind, beabsichtige ich, einige Arithmetik durchzuführen und die Datenwerte in das Arbeitsblatt einzufügen und, abhängig von den Zahlenkategorien, einen bestimmten "Seiten" -Bereich zu duplizieren.

Dies ist ein Gericht Dokument für die Kosten genannt „Precedent H“ Budgetierung und ist von justice.gov.uk unter folgenden URL zur Verfügung:

https://www.justice.gov.uk/downloads/courts/cpr/precedent-h-april-2016.xlsx

Ich suche die beide bedingt Kosten zu duplizieren Kategorien auf dem ersten Arbeitsblatt programmatisch, wenn ein Budget mehrere bedingte Kostenkategorien aufweist (Bedingte Kosten A/B/C/D/etc). Ich benutze Microsoft.Office.Interop.Excel.ApplicationClass(), um auf das Dokument zuzugreifen/zu öffnen, und verwende dann eine Kombination aus Range.Find und Range.Offset, um die Werte zuzuweisen. Ich habe gespielt mit UsedRange und dann eine Split-Funktion, um die letzte Zelle zu bekommen, dann rückwärts zählen mit einem Offset, um die erste Zelle auf der Seite zu bekommen, aber ich fragte mich, ob es eine einfachere Methode, um den Bereich zu bekommen?

Antwort

0

eine funktionierende Lösung gefunden einen bestimmten Bereich zu erhalten:

Range rngTo = wsBreakdown.Cells.SpecialCells(XlCellType.xlCellTypeLastCell, Type.Missing); 
Range rngFrom = rngTo.Offset[-24, -9]; 

dann ist die Fläche nur geschleift rund und Kopieren/Einfügen:

Range rngPaste = rngFrom.Offset[0, 1]; 
for (int i = 1; i == noPages; i++) 
{ 
    Range rngCopy = wsBreakdown.Range[rngFrom.Address, rngTo.Address]; 
    rngCopy.Copy(Type.Missing); 
    rngPaste.PasteSpecial(XlPasteType.xlPasteAllUsingSourceTheme, XlPasteSpecialOperation.xlPasteSpecialOperationNone, false, false); 

    rngTo = wsBreakdown.Cells.SpecialCells(XlCellType.xlCellTypeLastCell, Type.Missing); 
    rngFrom = rngTo.Offset[-24, -9]; 
    rngPaste = rngFrom.Offset[0, 1]; 
}