Печат
2 отговора
52 прегледа
Печат
С този код:
Private Sub command2_click()
Dim strFieldSeparator
Dim i
Dim j
Dim x As String
Dim y As Integer
y = 50
strFieldSeparator = ""
Open "C:\Testfile.PRN" For Output As #1
x = MSFlexGrid1.TextMatrix(0, 2)
For i = 0 To MSFlexGrid1.Rows - 1
For j = 0 To MSFlexGrid1.Cols - 1
Write #1, MSFlexGrid1.TextMatrix(i, j);
Next j
Write #1,
Next i
Close
End Sub
СЕ ПОЛУЧАВА НЕЩО, НО НЕ ТОВА КОЕТО МИ ТРЯБВА
ЕТО ТОВА Е РЕЗУЛТАТА:
"№","PLU","Найменование","Р-р","Бр.","Цена","Сума",
"1","M07337","M07337 - Д-КИ ""REPLAY"" R13 С РОЗОВ КАНТ","xl","1","39","39",
"2","M07586","M07586 - ДЪНК . ЯКЕ 'IQ' 06/558","l","1","68","68",
"3","M07582","M07582 - ДЖИНСИ 'IQ' 02/1113","xxl","1","40","40",
"4","M07582","M07582 - ДЖИНСИ 'IQ' 02/1113","","1","40","40",
"5","M07582","M07582 - ДЖИНСИ 'IQ' 02/1113","","1","40","40",
КАК ДА НАКАРАМ ТЕЗИ КАВИЧКИ И ЗАПЕТАИ ДА НЕ ИЗЛИЗАТ И ВСЯКА КОЛОНА ЗА ЗАПОЧВА ОТ ТОЧНО ОПРЕДЕЛЕНА ПОЗИЦИЯ ВЪВ ФАЙЛА
Private Sub command2_click()
Dim strFieldSeparator
Dim i
Dim j
Dim x As String
Dim y As Integer
y = 50
strFieldSeparator = ""
Open "C:\Testfile.PRN" For Output As #1
x = MSFlexGrid1.TextMatrix(0, 2)
For i = 0 To MSFlexGrid1.Rows - 1
For j = 0 To MSFlexGrid1.Cols - 1
Write #1, MSFlexGrid1.TextMatrix(i, j);
Next j
Write #1,
Next i
Close
End Sub
СЕ ПОЛУЧАВА НЕЩО, НО НЕ ТОВА КОЕТО МИ ТРЯБВА
ЕТО ТОВА Е РЕЗУЛТАТА:
"№","PLU","Найменование","Р-р","Бр.","Цена","Сума",
"1","M07337","M07337 - Д-КИ ""REPLAY"" R13 С РОЗОВ КАНТ","xl","1","39","39",
"2","M07586","M07586 - ДЪНК . ЯКЕ 'IQ' 06/558","l","1","68","68",
"3","M07582","M07582 - ДЖИНСИ 'IQ' 02/1113","xxl","1","40","40",
"4","M07582","M07582 - ДЖИНСИ 'IQ' 02/1113","","1","40","40",
"5","M07582","M07582 - ДЖИНСИ 'IQ' 02/1113","","1","40","40",
КАК ДА НАКАРАМ ТЕЗИ КАВИЧКИ И ЗАПЕТАИ ДА НЕ ИЗЛИЗАТ И ВСЯКА КОЛОНА ЗА ЗАПОЧВА ОТ ТОЧНО ОПРЕДЕЛЕНА ПОЗИЦИЯ ВЪВ ФАЙЛА
Re: Печат
Ами, понеже извеждаш данните в последователен текстов файл, аз лично бих препоръчал да вадиш данните от ФлексГрид като чисти стрингове, и да пишеш във файла с Print #1, String. Колкото до позицията на стринговете във файла - ще трябва на ръка да определяш броя интервали, с които да се запълва всяка "колона" с данни, за да се подредят. Не зная дали ще стане с табулатори, затова ти казвам с интервали, щото и без това не си уточнил за какъв принтер ще става дума. Ккато и да е. Да пробваме да видим какво ще получим...
Ще драсна примерен код с директно въведени данни, но ти просто ги вземай от ФлексГрид. ... Имайки от ФлексГрид чисти стрингове, без кавички и запетаи - можем да записваме във файла така:
Т.е. обърни внимание, че в реда, където се записва стринга във файла, съм "залепил" след стринга и интервали с функцията Space(), на която като параметър се подава число - брой интервали. За брой интервали съм изчислил от масива Col(), според предварително настроената ширина на конкретната колона минус броя на знаците, които се съдържат в дадения стринг. Т.е. ако ширината на колоната сме я указали 50 знака, а текста в нея е 23 - ще бъде изчислено число 27 - т.е. още 27 интервала, които ще бъдат добавени във файла във вид на стринг, за да се подравнят текстовете. Според вида на колоната - тези интервали може да се добавят преди или след стринга, за да се получи Left или Right подравняване. Когато се работи с принтери - може да се ползва и "Tab", но понеже си постнал само малка част от сорса - нямам представа къде и какво трябва да се получи. опитай така. Ако има разминаване - ще мислим пак.
Щирлиц
Ще драсна примерен код с директно въведени данни, но ти просто ги вземай от ФлексГрид. ... Имайки от ФлексГрид чисти стрингове, без кавички и запетаи - можем да записваме във файла така:
Private Sub command2_click()
Dim i As Long, j As Long
Dim col(7) As Long
'Това са ширините на колоните
col(1) = 4
col(2) = 6
col(3) = 50
col(4) = 6
col(5) = 5
col(6) = 5
col(7) = 5
'Отваряме файла
Open "C:\Testfile.PRN" For Output As #1
For i = 0 To MSFlexGrid1.Rows - 1
For j = 0 To MSFlexGrid1.Cols - 1
'Записваме данните във файла
Print #1, MSFlexGrid1.TextMatrix(i, j) & Space(col(j) - Len(MSFlexGrid1.TextMatrix(i, j)));
Next j
Print #1, vbCrLf;
Next i
'Затваряме файла
Close
End Sub
Т.е. обърни внимание, че в реда, където се записва стринга във файла, съм "залепил" след стринга и интервали с функцията Space(), на която като параметър се подава число - брой интервали. За брой интервали съм изчислил от масива Col(), според предварително настроената ширина на конкретната колона минус броя на знаците, които се съдържат в дадения стринг. Т.е. ако ширината на колоната сме я указали 50 знака, а текста в нея е 23 - ще бъде изчислено число 27 - т.е. още 27 интервала, които ще бъдат добавени във файла във вид на стринг, за да се подравнят текстовете. Според вида на колоната - тези интервали може да се добавят преди или след стринга, за да се получи Left или Right подравняване. Когато се работи с принтери - може да се ползва и "Tab", но понеже си постнал само малка част от сорса - нямам представа къде и какво трябва да се получи. опитай така. Ако има разминаване - ще мислим пак.
Щирлиц
Re: Печат
След малки промени в кода вече всичко е наред! Получи се точно това което искам. Много благодаря за помоща !!!
Ето и какво се получи на края!
strFieldSeparator = "|"
Open "C:\navtools\prnfile.PRN" For Output As #1
For j = 0 To MSFlexGrid1.Rows - 1
s = 3
i = 0
Print #1, MSFlexGrid1.TextMatrix(j, i) & Space(s - Len(MSFlexGrid1.TextMatrix(j, i))) _
& strFieldSeparator;
s = 6
i = 1
Print #1, MSFlexGrid1.TextMatrix(j, i) & Space(s - Len(MSFlexGrid1.TextMatrix(j, i))) _
& strFieldSeparator;
s = 50
i = 2
Print #1, MSFlexGrid1.TextMatrix(j, i) & Space(s - Len(MSFlexGrid1.TextMatrix(j, i))) _
& strFieldSeparator;
s = 4
i = 3
Print #1, MSFlexGrid1.TextMatrix(j, i) & Space(s - Len(MSFlexGrid1.TextMatrix(j, i))) _
& strFieldSeparator;
s = 4
i = 4
Print #1, MSFlexGrid1.TextMatrix(j, i) & Space(s - Len(MSFlexGrid1.TextMatrix(j, i))) _
& strFieldSeparator;
s = 5
i = 5
Print #1, MSFlexGrid1.TextMatrix(j, i) & Space(s - Len(MSFlexGrid1.TextMatrix(j, i))) _
& strFieldSeparator;
s = 6
i = 6
Print #1, MSFlexGrid1.TextMatrix(j, i) & Space(s - Len(MSFlexGrid1.TextMatrix(j, i))) _
& strFieldSeparator;
Print #1, vbCrLf;
Next j
Close
Ето и какво се получи на края!
strFieldSeparator = "|"
Open "C:\navtools\prnfile.PRN" For Output As #1
For j = 0 To MSFlexGrid1.Rows - 1
s = 3
i = 0
Print #1, MSFlexGrid1.TextMatrix(j, i) & Space(s - Len(MSFlexGrid1.TextMatrix(j, i))) _
& strFieldSeparator;
s = 6
i = 1
Print #1, MSFlexGrid1.TextMatrix(j, i) & Space(s - Len(MSFlexGrid1.TextMatrix(j, i))) _
& strFieldSeparator;
s = 50
i = 2
Print #1, MSFlexGrid1.TextMatrix(j, i) & Space(s - Len(MSFlexGrid1.TextMatrix(j, i))) _
& strFieldSeparator;
s = 4
i = 3
Print #1, MSFlexGrid1.TextMatrix(j, i) & Space(s - Len(MSFlexGrid1.TextMatrix(j, i))) _
& strFieldSeparator;
s = 4
i = 4
Print #1, MSFlexGrid1.TextMatrix(j, i) & Space(s - Len(MSFlexGrid1.TextMatrix(j, i))) _
& strFieldSeparator;
s = 5
i = 5
Print #1, MSFlexGrid1.TextMatrix(j, i) & Space(s - Len(MSFlexGrid1.TextMatrix(j, i))) _
& strFieldSeparator;
s = 6
i = 6
Print #1, MSFlexGrid1.TextMatrix(j, i) & Space(s - Len(MSFlexGrid1.TextMatrix(j, i))) _
& strFieldSeparator;
Print #1, vbCrLf;
Next j
Close
Редактирано от ActronB на