{"id":326520,"date":"2021-07-15T21:00:10","date_gmt":"2021-07-15T21:00:10","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=326520"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=326520","title":{"rendered":"\u0424\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 PL\/SQL \u0434\u043b\u044f \u0432\u044b\u0433\u0440\u0443\u0437\u043a\u0438 \u043e\u0442\u0447\u0451\u0442\u043e\u0432 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 XLS \u0438\u0437 Formspider \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Java"},"content":{"rendered":"\n<div class=\"post__text post__text_v2\" id=\"post-content-body\">\n<p>\u0427\u0430\u0441\u0442\u043e \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0434\u0435\u043b\u0430\u0442\u044c \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0432\u044b\u0433\u0440\u0443\u0437\u043a\u0438 \u043e\u0442\u0447\u0451\u0442\u043e\u0432 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435&nbsp;<strong>XLS<\/strong>&nbsp;\u0438\u0437&nbsp;<strong>Formspider<\/strong>, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f&nbsp;<strong>PL\/SQL developer<\/strong>&nbsp;(Oracle 11g2). \u0422\u0430\u043a \u0447\u0430\u0441\u0442\u043e, \u0447\u0442\u043e \u0440\u0435\u0448\u0438\u043b \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043d\u0430&nbsp;<strong>Java<\/strong>. <\/p>\n<p>\u042f\u0437\u044b\u043a Java \u0438\u0437\u0443\u0447\u0430\u044e \u0441\u0430\u043c \u043f\u043e \u043a\u043d\u0438\u0433\u0430\u043c \u0438 \u0432\u0438\u0434\u0435\u043e\u043a\u0443\u0440\u0441\u0430\u043c \u0443\u0436\u0435 \u0447\u0435\u0442\u0432\u0451\u0440\u0442\u044b\u0439 \u0433\u043e\u0434, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0435\u0441\u043b\u0438 \u0431\u0443\u0434\u0443\u0442 \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0438\u043b\u0438 \u0437\u0430\u043c\u0435\u0447\u0430\u043d\u0438\u044f, \u0442\u043e \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u0442\u044c \u0438\u0445 <a href=\"https:\/\/github.com\/mrprogre\/oracle_xlsx\" rel=\"noopener noreferrer nofollow\">\u0437\u0434\u0435\u0441\u044c \u0447\u0435\u0440\u0435\u0437 pull request.<\/a><\/p>\n<p>\u0421\u0430\u043c\u0430 \u0432\u044b\u0433\u0440\u0443\u0437\u043a\u0430 \u0438\u0437 PL\/SQL \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 <a href=\"https:\/\/github.com\/sokolsaiti\/as_xlsx\/blob\/master\/as_xlsx.sql\" rel=\"noopener noreferrer nofollow\">\u043f\u0430\u043a\u0435\u0442\u0430 as_xlsx<\/a>.<\/p>\n<p>\u0418 \u0442\u0430\u043a, \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u043c! \u042f \u0441\u0434\u0435\u043b\u0430\u043b \u043f\u0440\u043e\u0441\u0442\u0435\u043d\u044c\u043a\u0438\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0434\u043b\u044f \u0432\u0432\u043e\u0434\u0430 \u0438\u043c\u0451\u043d \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432, \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u044d\u043a\u0441\u0435\u043b\u044c \u0444\u0430\u0439\u043b\u0430 \u0438 \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432:<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/f72\/52c\/dcd\/f7252cdcd30bcaad36b65766d391169c.png\" width=\"399\" height=\"662\"><figcaption><\/figcaption><\/figure>\n<p>\u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043e\u043f\u0438\u0441\u0430\u043d \u0432 \u043a\u043b\u0430\u0441\u0441\u0435 \u043d\u0438\u0436\u0435. \u0414\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u0432\u0441\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u044b \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e. \u041e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0434\u043b\u044f \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432.<\/p>\n<pre><code class=\"java\">package QueriesCreater;  import java.awt.*; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import javax.swing.*; import javax.swing.table.DefaultTableCellRenderer; import javax.swing.table.DefaultTableModel; import javax.swing.table.JTableHeader;  public class Gui extends JFrame {     static ImageIcon logo = new ImageIcon(Toolkit.getDefaultToolkit().createImage(Gui.class.getResource(\"\/logo.png\")));     static JTable table;     static DefaultTableModel model;     static JTable objectTable;     static DefaultTableModel objectModel;     static int guiWindowHeight = 620;     static int guiWindowWidth = 370;     static int guiWindowX = 650;     static int guiWindowY = 190;      public Gui() {         this.setResizable(false);         setIconImage(logo.getImage());         this.setTitle(\"PL\/SQL: excel export\");         this.setFont(new Font(\"Tahoma\", Font.PLAIN, 14));         this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);         this.setBounds(guiWindowX, guiWindowY, guiWindowWidth, guiWindowHeight);         this.getContentPane().setBackground(new Color(0xFFF9A1));         this.getContentPane().setLayout(null);          \/\/ Object name table         final JScrollPane objectNames = new JScrollPane();         objectNames.setBounds(10, 25, 334, 201);         getContentPane().add(objectNames);          String[] objectColumns = new String[]{\"Object\", \"Value\"};         objectModel = new DefaultTableModel(new Object[][] {                 {\"Function name\", \"get_xls_function\"},                 {\"Procedure name\", \"get_xls_from_table\"},                 {\"Record type\", \"t_type_of_record\"},                 {\"Table as record\", \"t_type_of_record_tbl\"},                 {\"Table or view\", \"table_or_view\"},                 {\"Headers background\", \"FFCC66\"},                 {\"Headers font size\", 13},                 {\"Rows font size\", 12},                 {\"Rows height\", 25},                 {\"Rows bold\", false},                 {\"Rows italic\", false},                 {\"Headers font\", \"Times New Roman\"},                 {\"Rows font\", \"Times New Roman\"},                 {\"Horizontal alignment\", \"center\"},                 {\"Vertical alignment\", \"center\"},                 {\"Wrap text\", true},         },objectColumns) {             final boolean[] columnEditables = new boolean[]{                     false, true             };             public boolean isCellEditable(int row, int column) {                 return this.columnEditables[column];             }         };         objectTable = new JTable(objectModel);         objectTable.setDefaultRenderer(Object.class, new TableInfoRenderer());         \/\/ cell border color         objectTable.setGridColor(new Color(58, 79, 79));         objectTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);         \/\/ table background color         objectTable.setFillsViewportHeight(true);         objectTable.setBackground(new Color(250, 252, 255));         \/\/ headers settings         JTableHeader objectHeader = objectTable.getTableHeader();         objectHeader.setFont(new Font(\"Tahoma\", Font.BOLD, 13));         \/\/cell alignment         TableInfoRenderer objectRenderer = new TableInfoRenderer();         objectRenderer.setHorizontalAlignment(JLabel.LEADING);         objectTable.getColumnModel().getColumn(0).setCellRenderer(objectRenderer);         objectTable.getColumnModel().getColumn(1).setCellRenderer(objectRenderer);         objectTable.setRowHeight(20);         objectTable.setColumnSelectionAllowed(true);         objectTable.setCellSelectionEnabled(true);         objectTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);         objectTable.setFont(new Font(\"SansSerif\", Font.PLAIN, 13));         objectTable.getColumnModel().getColumn(0).setPreferredWidth(158);         objectTable.getColumnModel().getColumn(1).setPreferredWidth(158);         \/\/colors         objectTable.setSelectionBackground(new Color(254, 204, 204));         objectNames.setViewportView(objectTable);          \/\/ \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0433\u043e \u044f\u0447\u0435\u0439\u043a\u0438 \u043a\u043d\u043e\u043f\u043a\u043e\u0439 Delete         objectTable.addKeyListener(new KeyAdapter() {             public void keyPressed(KeyEvent e) {                 if (e.getKeyCode()==127){                     objectTable.setValueAt(\"\", objectTable.getSelectedRow(), objectTable.getSelectedColumn());                 }             }         });          \/\/ Columns table         final JScrollPane scrollPane = new JScrollPane();         scrollPane.setBounds(10, 255, 336, 283);         this.getContentPane().add(scrollPane);         String[] columns = new String[]{\"Header\", \"Width\", \"Column\", \"Type\"};         model = new DefaultTableModel(new Object[69][], columns) {             final boolean[] columnEditables = new boolean[]{                     true, true, true, true             };             public boolean isCellEditable(int row, int column) {                 return this.columnEditables[column];             }         };         table = new JTable(model);          \/\/ cell border color         table.setGridColor(new Color(58, 79, 79));         table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);         \/\/ table background color         table.setFillsViewportHeight(true);         table.setBackground(new Color(250, 252, 255));         \/\/ headers settings         JTableHeader header = table.getTableHeader();         header.setFont(new Font(\"Tahoma\", Font.BOLD, 13));         \/\/cell alignment         DefaultTableCellRenderer Renderer = new DefaultTableCellRenderer();         Renderer.setHorizontalAlignment(JLabel.CENTER);         table.getColumnModel().getColumn(0).setCellRenderer(Renderer);         table.getColumnModel().getColumn(1).setCellRenderer(Renderer);         table.getColumnModel().getColumn(2).setCellRenderer(Renderer);         table.getColumnModel().getColumn(3).setCellRenderer(Renderer);         table.setRowHeight(20);         table.setColumnSelectionAllowed(true);         table.setCellSelectionEnabled(true);         table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);         table.setFont(new Font(\"SansSerif\", Font.PLAIN, 13));         table.getColumnModel().getColumn(0).setPreferredWidth(90);         table.getColumnModel().getColumn(1).setPreferredWidth(48);         table.getColumnModel().getColumn(2).setPreferredWidth(90);         table.getColumnModel().getColumn(3).setPreferredWidth(90);         \/\/colors         table.setSelectionBackground(new Color(254, 204, 204));         scrollPane.setViewportView(table);          \/\/ \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0433\u043e \u044f\u0447\u0435\u0439\u043a\u0438 \u043a\u043d\u043e\u043f\u043a\u043e\u0439 Delete         table.addKeyListener(new KeyAdapter() {             public void keyPressed(KeyEvent e) {                 if (e.getKeyCode()==127){                     table.setValueAt(\"\", table.getSelectedRow(), table.getSelectedColumn());                 }             }         });          \/\/ Create objects button         JButton setColumnsBtn = new JButton(\"Create objects\");         setColumnsBtn.setBounds(224, 547, 120, 22);         setColumnsBtn.setBackground(new Color(192, 225, 255));         setColumnsBtn.setFont(new Font(\"Tahoma\", Font.BOLD, 11));         setColumnsBtn.setContentAreaFilled(true);         setColumnsBtn.setBorderPainted(true);         setColumnsBtn.setFocusable(false);         getContentPane().add(setColumnsBtn);         setColumnsBtn.addActionListener((e) -&gt; getValues());          \/\/ Clear table         JButton clearTableBtn = new JButton(\"Clear\");         clearTableBtn.setBounds(10, 547, 120, 22);         clearTableBtn.setBackground(new Color(251, 203, 203));         clearTableBtn.setFont(new Font(\"Tahoma\", Font.BOLD, 11));         clearTableBtn.setContentAreaFilled(true);         clearTableBtn.setBorderPainted(true);         clearTableBtn.setFocusable(false);         getContentPane().add(clearTableBtn);          JLabel objectNameLbl = new JLabel(\"Parameters\");         objectNameLbl.setFont(new Font(\"Tahoma\", Font.BOLD, 13));         objectNameLbl.setBounds(10, 5, 334, 18);         getContentPane().add(objectNameLbl);          JLabel columnLbl = new JLabel(\"Columns\");         columnLbl.setFont(new Font(\"Tahoma\", Font.BOLD, 13));         columnLbl.setBounds(10, 235, 334, 18);         getContentPane().add(columnLbl);          clearTableBtn.addActionListener((e) -&gt; {             for (int i = 0; i &lt; table.getRowCount(); i++)                 for(int j = 0; j &lt; table.getColumnCount(); j++) {                     table.setValueAt(\"\", i, j);                 }         });          this.setVisible(true);     }       public static void getValues() {         \/\/ \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u0442\u0440\u043e\u043a \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043c\u0430\u0441\u0441\u0438\u0432\u0430 (\u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 - 4)         int rowCount = 0;         int columnCount = table.getColumnCount();          for (int i = 0; i &lt; columnCount; i++) {             if (table.getValueAt(i, 0) != null) {                 rowCount++;             }         }          \/\/ \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b         Object[][] objectParameters = new Object[16][2];         for (int i = 0; i &lt; 16; i++) {             for (int j = 0; j &lt; 2; j++) {                 if (objectTable.getValueAt(i, j) != null) {                     objectParameters [i][j] = objectTable.getValueAt(i, j);                 }             }         }          \/\/ \u0441\u0442\u043e\u043b\u0431\u0446\u044b         Object[][] columns = new Object[rowCount][4];         for (int i = 0; i &lt; rowCount; i++) {             for (int j = 0; j &lt; columnCount; j++) {                 if (table.getValueAt(i, j) != null) {                     columns [i][j] = table.getValueAt(i, j);                 }             }         }          \/\/ \u0432\u044b\u0433\u0440\u0443\u0437\u043a\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0432 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0439 \u0444\u0430\u0439\u043b         if (columns.length &gt; 0) {             WriteToFile wr = new WriteToFile();             wr.write(new GetSqlQuery().getQueries(objectParameters, columns));             \/\/System.out.println(sql.getQueries(columns));         }     }      public static class TableInfoRenderer extends DefaultTableCellRenderer {         @Override         public Component getTableCellRendererComponent(JTable table, Object value,                                                        boolean isSelected, boolean hasFocus, int row, int column) {             JLabel c = (JLabel) super.getTableCellRendererComponent(table, value, isSelected, false, row, column);              if(column == 0) {                 if (isSelected) {                     super.setForeground(new Color(99, 9, 9));                 } else {                     super.setForeground(Color.BLACK);                 }                 c.setBackground(new Color(219, 234, 201));                 c.setHorizontalAlignment(LEFT);                 c.setFont(new Font(\"Tahoma\", Font.BOLD,13));             }             else {                 c.setBackground(Color.WHITE);                 c.setHorizontalAlignment(LEFT);                 if (isSelected) {                     super.setBackground(new Color(254, 204, 204));                 }             }             return c;         }     } }<\/code><\/pre>\n<p>\u0412 \u043a\u043b\u0430\u0441\u0441\u0435 <strong>GetSqlQuery<\/strong> \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u043c\u0430\u043d\u0434 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 PL\/SQL \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0440\u0430\u043d\u0435\u0435 \u0432\u0432\u0435\u0434\u0451\u043d\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445.<br \/>Record \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u043d\u0430 \u0432\u044b\u0431\u043e\u0440 \u0432 2 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430\u0445:<br \/>1) \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 %TYPE view \u0438\u043b\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u044b (\u043d\u0435 %ROWTYPE \u0442.\u043a. \u0447\u0430\u0449\u0435 \u043d\u0443\u0436\u043d\u044b \u043d\u0435 \u0432\u0441\u0435 \u043f\u043e\u043b\u044f \u0411\u0414 \u0434\u043b\u044f \u0432\u044b\u0433\u0440\u0443\u0437\u043a\u0438);<br \/>2) \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0432\u0432\u0435\u0434\u0451\u043d\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 \u0432 columns.<\/p>\n<p>\u041f\u044b\u0442\u0430\u043b\u0441\u044f \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043a\u0440\u0430\u0441\u0438\u0432\u043e, \u043d\u043e \u043d\u0435 \u043e\u0431\u043e\u0448\u043b\u043e\u0441\u044c \u0431\u0435\u0437 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 append.. \u043e\u043f\u044f\u0442\u044c \u0436\u0435 &#8212; \u043c\u043e\u0436\u043d\u043e \u043b\u0443\u0447\u0448\u0435 &#8212; \u043f\u043e\u043a\u0430\u0436\u0438\u0442\u0435 \u043a\u0430\u043a \u043d\u0430\u0434\u043e \u0447\u0435\u0440\u0435\u0437 pull request \u043d\u0430 gitHub<\/p>\n<pre><code class=\"java\">package QueriesCreater;  public class GetSqlQuery {      \/\/\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438     String getQueries(Object [][] pParameters, Object [][] pColumns) {         Object functionName = pParameters[0][1];         Object procedureName = pParameters[1][1];         Object recordName = pParameters[2][1];         Object typeTableName = pParameters[3][1];         Object tableOrViewName = pParameters[4][1];         Object headersBackground = pParameters[5][1];         Object headersFontSize = pParameters[6][1];         Object rowsFontSize = pParameters[7][1];         Object rowHeight = pParameters[8][1];         Object rowsBold = pParameters[9][1];         Object rowsItalic = pParameters[10][1];         Object xlsFont = pParameters[11][1];         Object rowsFont = pParameters[12][1];         Object horizontalAlignment = pParameters[13][1];         Object verticalAlignment = pParameters[14][1];         Object wrapText = pParameters[15][1];          StringBuilder xlsHeaders = new StringBuilder(\"-- Package specification\\n\");         \/\/ \u0441\u043e\u0437\u0434\u0430\u0451\u043c \u0437\u0430\u043f\u0438\u0441\u044c (1 \u0432\u0430\u0440\u0438\u0430\u043d\u0442)         xlsHeaders.append(\"-- version 1\\n\");         xlsHeaders.append(\"type \").append(recordName).append(\" is record (\\n\");         for (Object[] column : pColumns) {             xlsHeaders.append(\"\\t\").append(column[2]).append(\" \").append(tableOrViewName).append(\".\").append(column[2]).append(\"%TYPE,\\n\");         }         \/\/ \u0443\u0434\u0430\u043b\u044f\u0435\u043c \u043a\u0440\u0430\u0439\u043d\u044e\u044e \u0437\u0430\u043f\u044f\u0442\u0443\u044e         xlsHeaders.deleteCharAt(xlsHeaders.length() - 2);         xlsHeaders.append(\");\\n\\n\");          \/\/ \u0441\u043e\u0437\u0434\u0430\u0451\u043c \u0437\u0430\u043f\u0438\u0441\u044c (2 \u0432\u0430\u0440\u0438\u0430\u043d\u0442)         xlsHeaders.append(\"-- version 2\\n\");         xlsHeaders.append(\"type \").append(recordName).append(\" is record (\\n\");         for (Object[] column : pColumns) {             xlsHeaders.append(\"\\t\").append(column[2]).append(\" \").append(column[3]).append(\",\\n\");         }         \/\/ \u0443\u0434\u0430\u043b\u044f\u0435\u043c \u043a\u0440\u0430\u0439\u043d\u044e\u044e \u0437\u0430\u043f\u044f\u0442\u0443\u044e         xlsHeaders.deleteCharAt(xlsHeaders.length() - 2);         xlsHeaders.append(\");\\n\\n\");          \/\/\u0441\u043e\u0437\u0434\u0430\u0451\u043c \u0442\u0438\u043f \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0437\u0430\u043f\u0438\u0441\u0438         xlsHeaders.append(\"type \").append(typeTableName).append(\" is table of \").append(recordName).append(\";\\n\\n\");          \/\/ \u0441\u043e\u0437\u0434\u0430\u0451\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0442\u0438\u043f\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u044b         xlsHeaders.append(\"function \").append(functionName).append(\"(p_type in \").append(typeTableName).append(\") return blob;\\n\\n\");          \/\/ \u0442\u0435\u043b\u043e \u043f\u0430\u043a\u0435\u0442\u0430         xlsHeaders.append(\"-- Package body\\n\");         \/\/ \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438         xlsHeaders.append(\"-- function\\n\");         xlsHeaders.append(\"function \").append(functionName).append(\"(p_type in \").append(typeTableName).append(\") return blob is\\n\")                 .append(\"  row_num number := 0;\\n\")                 .append(\"  v_file  blob;\\n\")                 .append(\"begin\\n\")                 .append(\"  as_xlsx.clear_workbook;\\n\")                 .append(\"  as_xlsx.new_sheet('tab1');\\n\")                 .append(\"  row_num := row_num + 1;\\n\")                 .append(\"  as_xlsx.set_row(row_num, p_fontId =&gt; as_xlsx.get_font('\")                 .append(xlsFont)                 .append(\"', p_fontsize =&gt; \")                 .append(headersFontSize)                 .append(\", p_bold =&gt; true),\\n\")                 .append(\"  p_fillId =&gt; as_xlsx.get_fill('solid', '\")                 .append(headersBackground)                 .append(\"'), p_borderId =&gt; as_xlsx.get_border);\\n\")                 .append(\"\\t-- headers\\n\")                 .append(\"\\tas_xlsx.set_row_height(1, \")                 .append(rowHeight)                 .append(\");\\n\");          \/\/ headers         for (int i = 0; i &lt; pColumns.length; i++) {             int x = i + 1;             xlsHeaders.append(\"\\tas_xlsx.set_column_width(\")                     .append(x).append(\", \").append(pColumns[i][1]).append(\"); \")                     .append(\"as_xlsx.cell(\").append(x).append(\", 1, '\").append(pColumns[i][0]).append(\"', \")                     .append(\"p_alignment =&gt; as_xlsx.get_alignment (\")                     .append(\"p_horizontal =&gt; '\").append(horizontalAlignment).append(\"', \")                     .append(\"p_vertical =&gt; '\").append(verticalAlignment).append(\"', \")                     .append(\"p_wraptext =&gt; \").append(wrapText)                     .append(\"));\\n\");         }         xlsHeaders.append(\"  \\nFOR i IN 1..p_type.count\\n\" + \"    loop\\n\"                 + \"    row_num := row_num + 1;\\n\"                 + \"    as_xlsx.set_row(row_num, p_fontId =&gt; as_xlsx.get_font('\")                 .append(xlsFont)                 .append(\"', p_fontsize =&gt; \").append(rowsFontSize)                 .append(\"), p_borderId =&gt; as_xlsx.get_border);\\n\")                 .append(\"    as_xlsx.set_row_height(row_num, \")                 .append(rowHeight)                 .append(\");\\n    --\\n\");          \/\/ rows         for (int i = 0; i &lt; pColumns.length; i++) {             int x = i + 1;             xlsHeaders.append(\"    as_xlsx.cell(\")                     .append(x).append(\", i + 1, coalesce(p_type(i).\").append(pColumns[i][2]).append(\", '-'), \")                     .append(\"p_alignment =&gt; as_xlsx.get_alignment(\\n\")                     .append(\"p_horizontal =&gt; '\").append(horizontalAlignment).append(\"', \")                     .append(\"p_vertical =&gt; '\").append(verticalAlignment).append(\"', \")                     .append(\"p_wraptext =&gt; \").append(wrapText)                     .append(\"), p_fontId =&gt; as_xlsx.get_font('\")                     .append(rowsFont)                     .append(\"', p_fontsize =&gt; \")                     .append(rowsFontSize)                     .append(\", p_bold =&gt; \")                     .append(rowsBold)                     .append(\", p_italic =&gt; \")                     .append(rowsItalic)                     .append(\"));\\n\");         }         xlsHeaders.append(\"    end loop;\\n\"                 + \"  v_file := as_xlsx.finish;\\n\"                 + \"  RETURN v_file;\\n\"                 + \"  exception\\n\"                 + \"   when others then\\n\"                 + \"    sb_util.write_log('package.\")                 .append(functionName)                 .append(\" \u043e\u0448\u0438\u0431\u043a\u0430: ' ||sqlerrm||chr(13)||dbms_utility.format_error_backtrace, 'info'); \\n\")                 .append(\"END;\\n\\n\");          \/\/ \u0424\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b \u0434\u043b\u044f \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u044f \u0444\u0430\u0439\u043b\u0430         xlsHeaders.append(\"-- procedure\\n\");         xlsHeaders.append(\"procedure \").append(procedureName).append(\" is\\n\")                 .append(\"  l_file BLOB;\\n\")                 .append(\"  l_type \").append(typeTableName).append(\";\\n\")                 .append(\"begin\\n\")                 .append(\"  select \");         for (Object[] column : pColumns) {             xlsHeaders.append(column[2]).append(\", \");         }         xlsHeaders.deleteCharAt(xlsHeaders.length() - 2).append(\"\\n\");         xlsHeaders.append(\"    bulk collect into l_type\\n    from \")                 .append(tableOrViewName).append(\"\\n\");         xlsHeaders.append(\"   where column_name between sysdate and sysdate + 1;\\n\" + \"\\n\" + \"  l_file := \")                 .append(functionName).append(\"(l_type);\\n\").append(\"\\n\")                 .append(\"  if lengthb(l_file) &gt; 0 then\\n\")                 .append(\"    api_datasource.setColumnValue('BLOB_DUAL_ds.blob', l_file);\\n\")                 .append(\"    api_datasource.download('BLOB_DUAL_ds.blob', file_name||'.xlsx');\\n\")                 .append(\"  end if;\\n\\n\")                 .append(\"exception\\n\" + \"  when others then\\n\" + \"    sb_util.write_log('package.\")                 .append(procedureName)                 .append(\" \u043e\u0448\u0438\u0431\u043a\u0430: ' || sqlerrm ||chr(13)||dbms_utility.format_error_backtrace, 'info');\\n\")                 .append(\"end;\");          return xlsHeaders.toString();     } }<\/code><\/pre>\n<p>\u041a\u043b\u0430\u0441\u0441 <strong>WriteToFile<\/strong> \u0432\u044b\u0433\u0440\u0443\u0436\u0430\u0435\u0442 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 <strong>txt<\/strong> \u0432 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0435 \u0432\u0430\u043c\u0438 \u043c\u0435\u0441\u0442\u043e (\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e &#8212; \u043d\u0430 \u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b):<\/p>\n<pre><code class=\"java\">package QueriesCreater;  import javax.swing.*; import javax.swing.filechooser.FileNameExtensionFilter; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStreamWriter; import java.nio.charset.StandardCharsets;  public class WriteToFile {     void write(String pSql) {         \/\/Save file to         FileNameExtensionFilter filter = new FileNameExtensionFilter(\"*.txt\", \"*.txt\", \"*.TXT\", \"*.*\");         JFileChooser save_to = new JFileChooser();         save_to.setFileFilter(filter);         save_to.setCurrentDirectory(new File                 (System.getProperty(\"user.home\") + System.getProperty(\"file.separator\") + \"Desktop\"));         int ret = save_to.showDialog(null, \"Save\");         if (ret == JFileChooser.APPROVE_OPTION) {             try (OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream(save_to.getSelectedFile() + \".txt\"), StandardCharsets.UTF_8)) {                 writer.write(pSql);                 writer.flush();             } catch (IOException e) {                 e.printStackTrace();             }         }     } }<\/code><\/pre>\n<p>\u0417\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u0442 \u043f\u0430\u0440\u0430\u0434 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 &#8212; \u0434\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u0434:<\/p>\n<pre><code class=\"java\">package QueriesCreater;  public class Main {     public static void main(String[] args) {         new Gui();     } }<\/code><\/pre>\n<p>\u0412 \u0438\u0442\u043e\u0433\u0435 \u043f\u043e\u0441\u043b\u0435 \u0432\u0432\u043e\u0434\u0430 \u043d\u0443\u0436\u043d\u044b\u0445 \u043d\u0430\u043c \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/9fd\/532\/ffb\/9fd532ffbc08534959afa0026ca8f7f3.png\" width=\"387\" height=\"168\"><figcaption><\/figcaption><\/figure>\n<p> \u0438 \u043d\u0430\u0436\u0430\u0442\u0438\u044f \u043a\u043d\u043e\u043f\u043a\u0438 &#171;Create objects&#187; &#8212; \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b:<\/p>\n<pre><code class=\"sql\">-- Package specification -- version 1 type t_type_of_record is record ( \tDB_ID table_or_view.DB_ID%TYPE, \tDB_NAME table_or_view.DB_NAME%TYPE, \tDB_DATE table_or_view.DB_DATE%TYPE );  -- version 2 type t_type_of_record is record ( \tDB_ID NUMBER, \tDB_NAME VARCHAR2(69), \tDB_DATE DATE );  type t_type_of_record_tbl is table of t_type_of_record;  function get_xls_function(p_type in t_type_of_record_tbl) return blob;  -- Package body -- function function get_xls_function(p_type in t_type_of_record_tbl) return blob is   row_num number := 0;   v_file  blob; begin   as_xlsx.clear_workbook;   as_xlsx.new_sheet('tab1');   row_num := row_num + 1;   as_xlsx.set_row(row_num, p_fontId =&gt; as_xlsx.get_font('Times New Roman', p_fontsize =&gt; 13, p_bold =&gt; true),   p_fillId =&gt; as_xlsx.get_fill('solid', 'FFCC66'), p_borderId =&gt; as_xlsx.get_border); \t-- headers \tas_xlsx.set_row_height(1, 25); \tas_xlsx.set_column_width(1, 20); as_xlsx.cell(1, 1, 'id', p_alignment =&gt; as_xlsx.get_alignment (p_horizontal =&gt; 'center', p_vertical =&gt; 'center', p_wraptext =&gt; true)); \tas_xlsx.set_column_width(2, 50); as_xlsx.cell(2, 1, 'name', p_alignment =&gt; as_xlsx.get_alignment (p_horizontal =&gt; 'center', p_vertical =&gt; 'center', p_wraptext =&gt; true)); \tas_xlsx.set_column_width(3, 40); as_xlsx.cell(3, 1, 'date', p_alignment =&gt; as_xlsx.get_alignment (p_horizontal =&gt; 'center', p_vertical =&gt; 'center', p_wraptext =&gt; true));    FOR i IN 1..p_type.count     loop     row_num := row_num + 1;     as_xlsx.set_row(row_num, p_fontId =&gt; as_xlsx.get_font('Times New Roman', p_fontsize =&gt; 12), p_borderId =&gt; as_xlsx.get_border);     as_xlsx.set_row_height(row_num, 25);     --     as_xlsx.cell(1, i + 1, coalesce(p_type(i).DB_ID, '-'), p_alignment =&gt; as_xlsx.get_alignment( p_horizontal =&gt; 'center', p_vertical =&gt; 'center', p_wraptext =&gt; true), p_fontId =&gt; as_xlsx.get_font('Times New Roman', p_fontsize =&gt; 12, p_bold =&gt; false, p_italic =&gt; false));     as_xlsx.cell(2, i + 1, coalesce(p_type(i).DB_NAME, '-'), p_alignment =&gt; as_xlsx.get_alignment( p_horizontal =&gt; 'center', p_vertical =&gt; 'center', p_wraptext =&gt; true), p_fontId =&gt; as_xlsx.get_font('Times New Roman', p_fontsize =&gt; 12, p_bold =&gt; false, p_italic =&gt; false));     as_xlsx.cell(3, i + 1, coalesce(p_type(i).DB_DATE, '-'), p_alignment =&gt; as_xlsx.get_alignment( p_horizontal =&gt; 'center', p_vertical =&gt; 'center', p_wraptext =&gt; true), p_fontId =&gt; as_xlsx.get_font('Times New Roman', p_fontsize =&gt; 12, p_bold =&gt; false, p_italic =&gt; false));     end loop;   v_file := as_xlsx.finish;   RETURN v_file;   exception    when others then     sb_util.write_log('package.get_xls_function \u043e\u0448\u0438\u0431\u043a\u0430: ' ||sqlerrm||chr(13)||dbms_utility.format_error_backtrace, 'info');  END;  -- procedure procedure get_xls_from_table is   l_file BLOB;   l_type t_type_of_record_tbl; begin   select DB_ID, DB_NAME, DB_DATE      bulk collect into l_type     from table_or_view    where column_name between sysdate and sysdate + 1;    l_file := get_xls_function(l_type);    if lengthb(l_file) &gt; 0 then     api_datasource.setColumnValue('BLOB_DUAL_ds.blob', l_file);     api_datasource.download('BLOB_DUAL_ds.blob', file_name||'.xlsx');   end if;  exception   when others then     sb_util.write_log('package.get_xls_from_table \u043e\u0448\u0438\u0431\u043a\u0430: ' || sqlerrm ||chr(13)||dbms_utility.format_error_backtrace, 'info'); end;<\/code><\/pre>\n<p>\u0418\u0442\u043e\u0433\u043e\u0432\u044b\u0439 \u044d\u043a\u0441\u0435\u043b\u044c-\u0444\u0430\u0439\u043b \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/0da\/708\/4ea\/0da7084eab4efb74edae54473cae6909.png\" width=\"330\" height=\"190\"><figcaption><\/figcaption><\/figure>\n<p>\u041c\u043d\u0435 \u0442\u0430\u043a\u0430\u044f \u0443\u0442\u0438\u043b\u0438\u0442\u0430 \u043f\u0430\u0440\u0443 \u043b\u0435\u0442 \u043d\u0430\u0437\u0430\u0434 \u043e\u0447\u0435\u043d\u044c \u0431\u044b \u043f\u043e\u043c\u043e\u0433\u043b\u0430. \u041d\u0430\u0434\u0435\u044e\u0441\u044c \u042f \u043a\u043e\u043c\u0443-\u0442\u043e \u043f\u043e\u043c\u043e\u0433\u0443 \u044d\u0442\u0438\u043c \u043f\u043e\u0441\u0442\u043e\u043c. <\/p>\n<p>\u0421\u043f\u0430\u0441\u0438\u0431\u043e \u0437\u0430 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435!<\/p>\n<\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/post\/567966\/\"> https:\/\/habr.com\/ru\/post\/567966\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text_v2\" id=\"post-content-body\">\n<p>\u0427\u0430\u0441\u0442\u043e \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0434\u0435\u043b\u0430\u0442\u044c \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0432\u044b\u0433\u0440\u0443\u0437\u043a\u0438 \u043e\u0442\u0447\u0451\u0442\u043e\u0432 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435&nbsp;<strong>XLS<\/strong>&nbsp;\u0438\u0437&nbsp;<strong>Formspider<\/strong>, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f&nbsp;<strong>PL\/SQL developer<\/strong>&nbsp;(Oracle 11g2). \u0422\u0430\u043a \u0447\u0430\u0441\u0442\u043e, \u0447\u0442\u043e \u0440\u0435\u0448\u0438\u043b \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043d\u0430&nbsp;<strong>Java<\/strong>. <\/p>\n<p>\u042f\u0437\u044b\u043a Java \u0438\u0437\u0443\u0447\u0430\u044e \u0441\u0430\u043c \u043f\u043e \u043a\u043d\u0438\u0433\u0430\u043c \u0438 \u0432\u0438\u0434\u0435\u043e\u043a\u0443\u0440\u0441\u0430\u043c \u0443\u0436\u0435 \u0447\u0435\u0442\u0432\u0451\u0440\u0442\u044b\u0439 \u0433\u043e\u0434, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0435\u0441\u043b\u0438 \u0431\u0443\u0434\u0443\u0442 \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0438\u043b\u0438 \u0437\u0430\u043c\u0435\u0447\u0430\u043d\u0438\u044f, \u0442\u043e \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u0442\u044c \u0438\u0445 <a href=\"https:\/\/github.com\/mrprogre\/oracle_xlsx\" rel=\"noopener noreferrer nofollow\">\u0437\u0434\u0435\u0441\u044c \u0447\u0435\u0440\u0435\u0437 pull request.<\/a><\/p>\n<p>\u0421\u0430\u043c\u0430 \u0432\u044b\u0433\u0440\u0443\u0437\u043a\u0430 \u0438\u0437 PL\/SQL \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 <a href=\"https:\/\/github.com\/sokolsaiti\/as_xlsx\/blob\/master\/as_xlsx.sql\" rel=\"noopener noreferrer nofollow\">\u043f\u0430\u043a\u0435\u0442\u0430 as_xlsx<\/a>.<\/p>\n<p>\u0418 \u0442\u0430\u043a, \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u043c! \u042f \u0441\u0434\u0435\u043b\u0430\u043b \u043f\u0440\u043e\u0441\u0442\u0435\u043d\u044c\u043a\u0438\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0434\u043b\u044f \u0432\u0432\u043e\u0434\u0430 \u0438\u043c\u0451\u043d \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432, \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u044d\u043a\u0441\u0435\u043b\u044c \u0444\u0430\u0439\u043b\u0430 \u0438 \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432:<\/p>\n<figure class=\"\"><figcaption><\/figcaption><\/figure>\n<p>\u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043e\u043f\u0438\u0441\u0430\u043d \u0432 \u043a\u043b\u0430\u0441\u0441\u0435 \u043d\u0438\u0436\u0435. \u0414\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u0432\u0441\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u044b \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e. \u041e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0434\u043b\u044f \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432.<\/p>\n<pre><code class=\"java\">package QueriesCreater;  import java.awt.*; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import javax.swing.*; import javax.swing.table.DefaultTableCellRenderer; import javax.swing.table.DefaultTableModel; import javax.swing.table.JTableHeader;  public class Gui extends JFrame {     static ImageIcon logo = new ImageIcon(Toolkit.getDefaultToolkit().createImage(Gui.class.getResource(\"\/logo.png\")));     static JTable table;     static DefaultTableModel model;     static JTable objectTable;     static DefaultTableModel objectModel;     static int guiWindowHeight = 620;     static int guiWindowWidth = 370;     static int guiWindowX = 650;     static int guiWindowY = 190;      public Gui() {         this.setResizable(false);         setIconImage(logo.getImage());         this.setTitle(\"PL\/SQL: excel export\");         this.setFont(new Font(\"Tahoma\", Font.PLAIN, 14));         this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);         this.setBounds(guiWindowX, guiWindowY, guiWindowWidth, guiWindowHeight);         this.getContentPane().setBackground(new Color(0xFFF9A1));         this.getContentPane().setLayout(null);          \/\/ Object name table         final JScrollPane objectNames = new JScrollPane();         objectNames.setBounds(10, 25, 334, 201);         getContentPane().add(objectNames);          String[] objectColumns = new String[]{\"Object\", \"Value\"};         objectModel = new DefaultTableModel(new Object[][] {                 {\"Function name\", \"get_xls_function\"},                 {\"Procedure name\", \"get_xls_from_table\"},                 {\"Record type\", \"t_type_of_record\"},                 {\"Table as record\", \"t_type_of_record_tbl\"},                 {\"Table or view\", \"table_or_view\"},                 {\"Headers background\", \"FFCC66\"},                 {\"Headers font size\", 13},                 {\"Rows font size\", 12},                 {\"Rows height\", 25},                 {\"Rows bold\", false},                 {\"Rows italic\", false},                 {\"Headers font\", \"Times New Roman\"},                 {\"Rows font\", \"Times New Roman\"},                 {\"Horizontal alignment\", \"center\"},                 {\"Vertical alignment\", \"center\"},                 {\"Wrap text\", true},         },objectColumns) {             final boolean[] columnEditables = new boolean[]{                     false, true             };             public boolean isCellEditable(int row, int column) {                 return this.columnEditables[column];             }         };         objectTable = new JTable(objectModel);         objectTable.setDefaultRenderer(Object.class, new TableInfoRenderer());         \/\/ cell border color         objectTable.setGridColor(new Color(58, 79, 79));         objectTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);         \/\/ table background color         objectTable.setFillsViewportHeight(true);         objectTable.setBackground(new Color(250, 252, 255));         \/\/ headers settings         JTableHeader objectHeader = objectTable.getTableHeader();         objectHeader.setFont(new Font(\"Tahoma\", Font.BOLD, 13));         \/\/cell alignment         TableInfoRenderer objectRenderer = new TableInfoRenderer();         objectRenderer.setHorizontalAlignment(JLabel.LEADING);         objectTable.getColumnModel().getColumn(0).setCellRenderer(objectRenderer);         objectTable.getColumnModel().getColumn(1).setCellRenderer(objectRenderer);         objectTable.setRowHeight(20);         objectTable.setColumnSelectionAllowed(true);         objectTable.setCellSelectionEnabled(true);         objectTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);         objectTable.setFont(new Font(\"SansSerif\", Font.PLAIN, 13));         objectTable.getColumnModel().getColumn(0).setPreferredWidth(158);         objectTable.getColumnModel().getColumn(1).setPreferredWidth(158);         \/\/colors         objectTable.setSelectionBackground(new Color(254, 204, 204));         objectNames.setViewportView(objectTable);          \/\/ \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0433\u043e \u044f\u0447\u0435\u0439\u043a\u0438 \u043a\u043d\u043e\u043f\u043a\u043e\u0439 Delete         objectTable.addKeyListener(new KeyAdapter() {             public void keyPressed(KeyEvent e) {                 if (e.getKeyCode()==127){                     objectTable.setValueAt(\"\", objectTable.getSelectedRow(), objectTable.getSelectedColumn());                 }             }         });          \/\/ Columns table         final JScrollPane scrollPane = new JScrollPane();         scrollPane.setBounds(10, 255, 336, 283);         this.getContentPane().add(scrollPane);         String[] columns = new String[]{\"Header\", \"Width\", \"Column\", \"Type\"};         model = new DefaultTableModel(new Object[69][], columns) {             final boolean[] columnEditables = new boolean[]{                     true, true, true, true             };             public boolean isCellEditable(int row, int column) {                 return this.columnEditables[column];             }         };         table = new JTable(model);          \/\/ cell border color         table.setGridColor(new Color(58, 79, 79));         table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);         \/\/ table background color         table.setFillsViewportHeight(true);         table.setBackground(new Color(250, 252, 255));         \/\/ headers settings         JTableHeader header = table.getTableHeader();         header.setFont(new Font(\"Tahoma\", Font.BOLD, 13));         \/\/cell alignment         DefaultTableCellRenderer Renderer = new DefaultTableCellRenderer();         Renderer.setHorizontalAlignment(JLabel.CENTER);         table.getColumnModel().getColumn(0).setCellRenderer(Renderer);         table.getColumnModel().getColumn(1).setCellRenderer(Renderer);         table.getColumnModel().getColumn(2).setCellRenderer(Renderer);         table.getColumnModel().getColumn(3).setCellRenderer(Renderer);         table.setRowHeight(20);         table.setColumnSelectionAllowed(true);         table.setCellSelectionEnabled(true);         table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);         table.setFont(new Font(\"SansSerif\", Font.PLAIN, 13));         table.getColumnModel().getColumn(0).setPreferredWidth(90);         table.getColumnModel().getColumn(1).setPreferredWidth(48);         table.getColumnModel().getColumn(2).setPreferredWidth(90);         table.getColumnModel().getColumn(3).setPreferredWidth(90);         \/\/colors         table.setSelectionBackground(new Color(254, 204, 204));         scrollPane.setViewportView(table);          \/\/ \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0433\u043e \u044f\u0447\u0435\u0439\u043a\u0438 \u043a\u043d\u043e\u043f\u043a\u043e\u0439 Delete         table.addKeyListener(new KeyAdapter() {             public void keyPressed(KeyEvent e) {                 if (e.getKeyCode()==127){                     table.setValueAt(\"\", table.getSelectedRow(), table.getSelectedColumn());                 }             }         });          \/\/ Create objects button         JButton setColumnsBtn = new JButton(\"Create objects\");         setColumnsBtn.setBounds(224, 547, 120, 22);         setColumnsBtn.setBackground(new Color(192, 225, 255));         setColumnsBtn.setFont(new Font(\"Tahoma\", Font.BOLD, 11));         setColumnsBtn.setContentAreaFilled(true);         setColumnsBtn.setBorderPainted(true);         setColumnsBtn.setFocusable(false);         getContentPane().add(setColumnsBtn);         setColumnsBtn.addActionListener((e) -&gt; getValues());          \/\/ Clear table         JButton clearTableBtn = new JButton(\"Clear\");         clearTableBtn.setBounds(10, 547, 120, 22);         clearTableBtn.setBackground(new Color(251, 203, 203));         clearTableBtn.setFont(new Font(\"Tahoma\", Font.BOLD, 11));         clearTableBtn.setContentAreaFilled(true);         clearTableBtn.setBorderPainted(true);         clearTableBtn.setFocusable(false);         getContentPane().add(clearTableBtn);          JLabel objectNameLbl = new JLabel(\"Parameters\");         objectNameLbl.setFont(new Font(\"Tahoma\", Font.BOLD, 13));         objectNameLbl.setBounds(10, 5, 334, 18);         getContentPane().add(objectNameLbl);          JLabel columnLbl = new JLabel(\"Columns\");         columnLbl.setFont(new Font(\"Tahoma\", Font.BOLD, 13));         columnLbl.setBounds(10, 235, 334, 18);         getContentPane().add(columnLbl);          clearTableBtn.addActionListener((e) -&gt; {             for (int i = 0; i &lt; table.getRowCount(); i++)                 for(int j = 0; j &lt; table.getColumnCount(); j++) {                     table.setValueAt(\"\", i, j);                 }         });          this.setVisible(true);     }       public static void getValues() {         \/\/ \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u0442\u0440\u043e\u043a \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043c\u0430\u0441\u0441\u0438\u0432\u0430 (\u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 - 4)         int rowCount = 0;         int columnCount = table.getColumnCount();          for (int i = 0; i &lt; columnCount; i++) {             if (table.getValueAt(i, 0) != null) {                 rowCount++;             }         }          \/\/ \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b         Object[][] objectParameters = new Object[16][2];         for (int i = 0; i &lt; 16; i++) {             for (int j = 0; j &lt; 2; j++) {                 if (objectTable.getValueAt(i, j) != null) {                     objectParameters [i][j] = objectTable.getValueAt(i, j);                 }             }         }          \/\/ \u0441\u0442\u043e\u043b\u0431\u0446\u044b         Object[][] columns = new Object[rowCount][4];         for (int i = 0; i &lt; rowCount; i++) {             for (int j = 0; j &lt; columnCount; j++) <\/code><\/pre>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-326520","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/326520","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=326520"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/326520\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=326520"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=326520"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=326520"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}