Das Notes Forum
Domino 9 und frühere Versionen => ND8: Entwicklung => Thema gestartet von: v_haderer am 12.08.14 - 08:09:58
-
Guten Morgen!
Bei allen meinen Applikationen (8.5.3) die mit Excel kommunizieren tritt seit einiger Zeit ein sehr unangenehmes Phänomen auf:
Der in der Excelvorlage zuvor definierte Druckbereich verschwindet einfach. Was heißt: bei einem von mir befüllten Kalkulationsdokument (einige hundert Zeilen bzw Folder) wird immer alles ausgedruckt und nicht wie festgelegt nur die 1te Seite.
geöffnet wird das XLSX ganz simpel über:
Set xlApp = CreateObject("Excel.Application")
Set xlBook = xlApp.Workbooks.Add ( ExcelFile )
Set xlSheet = xlBook.Worksheets(1)
xlApp.Visible = True
Die offizielle Aussage von Mircrosoft -> das Problem ist (ja ja natürlich ;) ) Lotus Notes die Microsoft-Produkte ja alle funktionieren....usw und sofort. Die Culture (???) wird beim Aufruf des Excelobjekts falsche gesetzt,...nämlich auf "US",... ich möge doch die "Culture" meines Notesclients (und den einigen 1000 anderen) auf D setzen und dann sollts funktonieren ... ???
Ich habe leider nicht die geringste Ahnung was damit gemeint ist. Unsere Clients sind alle auf Deutsch eingestellt (Language, Content, Region,....alles) und war auch noch nie ein Problem.
( >:D was ich am Rande extrem witzig finde: lt MS heißt die Property die den Druckbereich in Excel festlegt,... "Druckbereich". Wird Excel nun mit der falschen amerikanischen "Culture" gestartet so heißt die Property "Print area",.... die ursprüngliche Property "Druckbereich" ist zwar noch gespeichert, wird allerdings nimmer erkannt,...weil ja deutsch :-) .....es gibt Dinge die will man einfach garnicht wissen :P )
Hat zufällig jemand von euch eine Idee wie ich dieses Problem in den Griff bekommen könnte? :-:
thx
glg
Viktor
-
Hallo,
Sorry fuer meine eventuell dumme Nachfrage.
Aber in dem von dir gezeigten Code-Schnipsel oeffnest du lediglich eine neue Arbeitsmappe in Excel.
Diese hat aber von haus aus noch keinen definierten Druckbereich.
Also wo ist denn jetzt das Problem genau?
Andreas
-
Hast Du schon einmal versucht, den Druckbereich im Script festzulegen?
-
Hallo
ExcelFile = "c:\vorlage.xltx"
Set xlBook = xlApp.Workbooks.Add ( ExcelFile )
....öffnet ein Excelfile. In eben dieser Vorlage.xltx ist ein Druckbereich definiert.
Werde "alte" Excelfiles (vorlage.xlt) mit definiertem Druckbereich aufgerufen so bleibt Dieser sonderbarerweise erhalten.
-
Hast Du schon einmal versucht, den Druckbereich im Script festzulegen?
Hallo Peter,
nein hab ich bis jetzt noch nicht probiert.
Die Vorlagen werden von den Kunden selber gewartet,..dh "mein" Druckbereich würde nicht viel bringen. Ich werds aber ausprobiern was dann passiert ;-)
-
Hast Du schon einmal versucht, den Druckbereich im Script festzulegen?
hat testweise funktioniert:
ActiveSheet.PageSetup.PrintArea = "$B$4:$D$7"
...hilft mir aber wie gesagt nicht wirklich weiter :-(
-
Kommst Du per Script an die deutsche Eigenschaft (-> Druckbereich)?
Wenn Du die irgendwie erkennen könntest, könntest Du die per Script wieder setzen, wie Du schon probiert hast.
-
Hallo,
Hast du schon einmal nachgesehen, ob nach dem Oeffnen des Dokumentes, basierend auf der Vorlage,
die Eigenschaft PageSetup.PrintArea ueberhaupt noch gesetzt ist auf dem gerade offenen Sheet?
Andreas
-
Das ist ein (bekannter) Bug in Excel (nicht Notes!) bei der Ansteuerung über COM.
Hier ein Code-Schnipsel um das auszubügeln. Ich habe das in meinem Code in zwei Teile trennen müssen, da ich die Excel-datei nach dem ersten Öffnen mehrfach speichern muss, das Setzen der Print-Area darf aber nur beim "finalen" Speichern stattfinden
%REM
Excel2010 (und auch schon Excel2007) hat einen Bug: beim Öffnen über workbook.Open "vergisst" Excel den Druckbereich und die Druckwiederholzeilen.
Die stehen zwar intern noch in den NamenPrint_Area und Print_Titles müssen aber von dort geholt und neu gesetzt werden
Darf aber nur im "finalen" speichern gesetzt sein, sonst kommt es zu einer Bereichs-Namen-Fehlermeldung von Excel
%END REM
Dim sSheetName As String
Dim sCurrentName As String
Dim sRange As String
Erase g_sAreaList
Erase g_sTitleList
'erster Teil: holen der PrintArea
Forall sheet In g_xlWBook.Worksheets
sSheetName = sheet.Name
Forall n In sheet.Names
sCurrentName = n.Name
If Instr( sCurrentName, "Print_Area" ) > 0 Then
sRange = n.RefersTo
g_sAreaList( sSheetName ) = sRange
Elseif Instr( sCurrentName, "Print_Titles" ) > 0 Then
sRange = n.RefersTo
g_sTitleList( sSheetName ) = sRange
Else
'
End If
End Forall
End Forall
'andere Sub
'zweiter Teil: Setzen der PrintArea
Forall sheet In g_xlWBook.Worksheets
sSheetName = sheet.Name
If Iselement( g_sAreaList( sSheetName ) ) Then
sRange = g_sAreaList( sSheetName )
sheet.PageSetup.PrintArea = sRange
End If
If Iselement( g_sTitleList( sSheetName ) ) Then
sRange = g_sTitleList( sSheetName )
sheet.PageSetup.PrintTitleRows = sRange
End If
End Forall
hth
Thomas
-
Hallo,
Hast du schon einmal nachgesehen, ob nach dem Oeffnen des Dokumentes, basierend auf der Vorlage,
die Eigenschaft PageSetup.PrintArea ueberhaupt noch gesetzt ist auf dem gerade offenen Sheet?
Andreas
Hallo,
ist leider leer und somit wird alles gedruckt!
-
Das ist ein (bekannter) Bug in Excel (nicht Notes!) bei der Ansteuerung über COM.
Hier ein Code-Schnipsel um das auszubügeln. Ich habe das in meinem Code in zwei Teile trennen müssen, da ich die Excel-datei nach dem ersten Öffnen mehrfach speichern muss, das Setzen der Print-Area darf aber nur beim "finalen" Speichern stattfinden
%REM
Excel2010 (und auch schon Excel2007) hat einen Bug: beim Öffnen über workbook.Open "vergisst" Excel den Druckbereich und die Druckwiederholzeilen.
Die stehen zwar intern noch in den NamenPrint_Area und Print_Titles müssen aber von dort geholt und neu gesetzt werden
Darf aber nur im "finalen" speichern gesetzt sein, sonst kommt es zu einer Bereichs-Namen-Fehlermeldung von Excel
%END REM
Dim sSheetName As String
Dim sCurrentName As String
Dim sRange As String
Erase g_sAreaList
Erase g_sTitleList
'erster Teil: holen der PrintArea
Forall sheet In g_xlWBook.Worksheets
sSheetName = sheet.Name
Forall n In sheet.Names
sCurrentName = n.Name
If Instr( sCurrentName, "Print_Area" ) > 0 Then
sRange = n.RefersTo
g_sAreaList( sSheetName ) = sRange
Elseif Instr( sCurrentName, "Print_Titles" ) > 0 Then
sRange = n.RefersTo
g_sTitleList( sSheetName ) = sRange
Else
'
End If
End Forall
End Forall
'andere Sub
'zweiter Teil: Setzen der PrintArea
Forall sheet In g_xlWBook.Worksheets
sSheetName = sheet.Name
If Iselement( g_sAreaList( sSheetName ) ) Then
sRange = g_sAreaList( sSheetName )
sheet.PageSetup.PrintArea = sRange
End If
If Iselement( g_sTitleList( sSheetName ) ) Then
sRange = g_sTitleList( sSheetName )
sheet.PageSetup.PrintTitleRows = sRange
End If
End Forall
hth
Thomas
Hallo Thomas,
habs nach exakt deiner Vorgabe umgesetzt und funktioniert astrein - VIELEN VIELEN DANK! :) :) :)
lg
Viktor