powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Что не так???
7 сообщений из 7, страница 1 из 1
Что не так???
    #33847216
Yordan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый ден! Пытаюсь динамически создать excel-файл используя BLOB-поле в качестве OutputStream. Ошибок во время выполнения нет. Однако длина созданного BLOB-а всегда равна 86. Когда генерирую этот же файл на диск - длина более 13 кб. Идея такова - динамически сгенерировать excel через хранимую процедуру Java в БД Oracle и выдать его в виде raw вызываюшей функции. Помогите пожалуйста.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
 import  jxl.*;
 import  jxl.write.*;
 import  jxl.write.Number;
 import  java.io.*;
 import  oracle.sql.*;
 import  java.sql.*;


 public   class  Class1 {
    // Данные для отчета



     static   int [] num = { 1 , 2 , 3 };
     static  String[] name = {"Кредиты физ. лиц","Депозиты физ. лиц","Ценные бумаги"};
     static   double [] summa = { 160050 . 50 , 5632312 . 778 , 905163 . 19 };

     public   static  String /* byte[] */  ret_xls()
    {
        OutputStream out =  null ;
        InputStream in =  null ;
        Connection con= null ;
         try  {
        
            String driverName = "oracle.jdbc.driver.OracleDriver";
             Class .forName(driverName);
            String serverName = "bree.gondor.fors";
            String portNumber = "1522";
            String sid = "rsmob";
            String url = "jdbc:oracle:thin:@" + serverName + ":" + portNumber + ":" + sid;
            String username = "resy";
            String password = "resy";       
            con = DriverManager.getConnection(url, username, password);
            
            BLOB blob = BLOB.createTemporary(con, true, BLOB.DURATION_SESSION);
            out = blob.getBinaryOutputStream();            

            // Создаем книгу Excell
            WritableWorkbook wb = Workbook.createWorkbook(out);
            // Создаем лист
            WritableSheet sheet = wb.createSheet("GAP",  0 );
            // Задаем ширину первых трех столбцов
            sheet.setColumnView( 0 , 10 );
            sheet.setColumnView( 1 , 30 );
            sheet.setColumnView( 2 , 20 );
            // Создаем шрифт для данных
            WritableFont font01Normal =  new  WritableFont (WritableFont.ARIAL,  12 , WritableFont.BOLD);
            WritableFont font02Normal =  new  WritableFont (WritableFont.ARIAL,  10 , WritableFont.NO_BOLD);

            // Создаем стиль ячейки для заголовка таблицы
            WritableCellFormat cellstyletableheader =  new  WritableCellFormat (font01Normal);
            cellstyletableheader.setAlignment(Alignment.CENTRE);
            cellstyletableheader.setWrap(true);
            cellstyletableheader.setBorder(Border.ALL, BorderLineStyle.MEDIUM);
            cellstyletableheader.setVerticalAlignment(VerticalAlignment.CENTRE);
            cellstyletableheader.setBackground(Colour.BROWN, Pattern.SOLID);

            // Создаем стиль ячейки для данных в таблице.
            WritableCellFormat cellstyletable =  new  WritableCellFormat (font02Normal);
            cellstyletable.setAlignment(Alignment.LEFT);
            cellstyletable.setWrap(true);
            cellstyletable.setBorder(Border.BOTTOM, BorderLineStyle.THIN);
            cellstyletable.setBorder(Border.LEFT, BorderLineStyle.THIN);
            cellstyletable.setBorder(Border.RIGHT, BorderLineStyle.THIN);
            cellstyletable.setVerticalAlignment(VerticalAlignment.TOP);

            // Дальше рисуем заголовок таблицы
            sheet.addCell( new  Label( 0 , 0 ,"Номер",cellstyletableheader));
            sheet.addCell( new  Label( 1 , 0 ,"Наименование",cellstyletableheader));
            sheet.addCell( new  Label( 2 , 0 ,"Сумма",cellstyletableheader));

            // Шапка заполнена
            // Побежали по массиву.
             int  r =  0 ;
             while  (r <  3 ) 
            {
                // И как и выше пишем данные из массива

                sheet.addCell( new  Number ( 0 , r+ 1 , num[r], cellstyletable));
                sheet.addCell( new  Label ( 1 , r+ 1 , name[r], cellstyletable));

                NumberFormat fivedps =  new  NumberFormat("##########0.00");
                WritableCellFormat fivedpsFormat =  new  WritableCellFormat(fivedps);
                fivedpsFormat.setBorder(Border.ALL, BorderLineStyle.THIN);
                sheet.addCell( new  Number ( 2 , r+ 1 , summa[r], fivedpsFormat));

                r++;
           }

            //добавим итоги
            Formula f =  new  Formula( 2 , 4 , "C2+C3+C4");
            sheet.addCell(f);

            //Дополнительное форматирование
            WritableCell c=sheet.getWritableCell( 0 , 1 );
            WritableCellFormat labelformat =  new  WritableCellFormat ();
            labelformat.setAlignment(Alignment.RIGHT);
            labelformat.setBackground(Colour.BLUE2, Pattern.SOLID);
            c.setCellFormat(labelformat);
            WritableCellFeatures cf= new  WritableCellFeatures();
            cf.setComment("Эта ячейка отформатирована нарочно для примера");
            c.setCellFeatures(cf);

            // Пишем в поток
           
            wb.write();
            wb.close();

            in = blob.getBinaryStream();
             int  length;
             byte [] buf =  new   byte [blob.getChunkSize()];                        
             while  ((length = in.read(buf)) != - 1 ) out.write(buf,  0 , length);
            
             return  ""+blob.getLength();
            //return blob.getBytes();
        }
         catch  (Exception e) {  return  e.getMessage(); }
         finally { 
                  if  (con !=  null )  try {con.close();} catch (Exception ef1){} 
                  if  (in !=  null )   try {in.close();} catch (Exception ef2){} 
                  if  (out !=  null )  try {out.close();} catch (Exception ef3){} 
               }

  
       

    }

 public   static   void  main(String[] args)
{
Class1 c= new  Class1();
System.out.println(c.ret_xls());
}
    
}
...
Рейтинг: 0 / 0
Что не так???
    #33847247
Фотография Timm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
blob.getLength();
поменяй на
Код: plaintext
blob.length();
...
Рейтинг: 0 / 0
Что не так???
    #33847266
Yordan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо Timm! Длина блоба стала равной длине файла = 13кб.
...
Рейтинг: 0 / 0
Что не так???
    #33847291
Yordan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Странно...если поставить выражение

return ""+(blob.getBytes()).length;

то все равно возвращает 86...Следовательно и массив байтов вернет такой же длины...
...
Рейтинг: 0 / 0
Что не так???
    #33847689
Фотография Timm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YordanСтранно...если поставить выражение

return ""+(blob.getBytes()).length;

то все равно возвращает 86...Следовательно и массив байтов вернет такой же длины...
дока
...
Рейтинг: 0 / 0
Что не так???
    #33981288
mos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dobryj den!
pocemu formula ne rabotaet, Java rugaetsia na ";"

Formula f = new Formula(2,4, "SUM(C2+C3;C4)");
sheet.addCell(f);
...
Рейтинг: 0 / 0
Что не так???
    #33982261
Фотография Кувалдин Роман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mosDobryj den!
pocemu formula ne rabotaet, Java rugaetsia na ";"

Formula f = new Formula(2,4, "SUM(C2+C3;C4)");
sheet.addCell(f);

На семиколон джава ругаться не умеет. Она ругается скорее всего на то, что ты бездумно передрал данный исходник, не потрудившись создать класс Formula :-)
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Что не так???
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]