как ввести неверную формулу в Excel с помощью Java - PullRequest
1 голос
/ 02 ноября 2010

В настоящее время я делаю код, который создает Excel с использованием Java JXL.Я не столкнулся с проблемой, пока существует формула, которую я использую.Проблема в том, что мне нужно ввести формулу, которую Excel не сможет найти, потому что мы используем специальный Excel для ее чтения.Мне нужно, чтобы мой код сохранил недопустимую формулу вместо записи = 1 ERROR () в ячейку, чтобы при открытии моего файла с помощью нашего специального Excel он получал значение.Как мне поступить?

Вот мой код:

WorkbookSettings ws = new WorkbookSettings();
            ws.setLocale(new Locale("en", "EN"));
            workbook = Workbook.createWorkbook(file, ws);
            WritableSheet s = workbook.createSheet("Sheet1", 0);
            WritableFont wf = new WritableFont(WritableFont.ARIAL, 10, WritableFont.NO_BOLD);
            DateFormat dateFormat = new DateFormat("M/d/yyyy H:mm");
            NumberFormat dp = new NumberFormat("#");
            NumberFormat dp2 = new NumberFormat("#.##");
            ResultSetMetaData rsmd = rs.getMetaData();
            int nRow = 0;
            Label l = null;
            Formula f = null;
            for(int index = 1; index <= rsmd.getColumnCount(); index++) {
                l = new Label(index-1,nRow,rsmd.getColumnName(index),new WritableCellFormat(wf));
                s.addCell(l);
            }

            nRow++;
            while(rs.next()) {
                String valueDate = VerifyNull.ifNull(rs.getString(1), Constant.BLANK);
                f = new Formula(0,nRow,valueDate,new WritableCellFormat(dp));
                s.addCell(f);
                String rateDate = VerifyNull.ifNull(rs.getString(2), Constant.BLANK);
                f = new Formula(1,nRow,rateDate,new WritableCellFormat(dp));
                s.addCell(f);
                String market = VerifyNull.ifNull(rs.getString(3), Constant.BLANK);
                l = new Label(3,nRow,market,new WritableCellFormat(wf));
                s.addCell(l);
                String ccy = VerifyNull.ifNull(rs.getString(4), Constant.BLANK);
                l = new Label(4,nRow,ccy,new WritableCellFormat(wf));
                s.addCell(l);
                String label = VerifyNull.ifNull(rs.getString(5), Constant.BLANK);
                l = new Label(5,nRow,label,new WritableCellFormat(wf));
                s.addCell(l);
                String quoteDate = VerifyNull.ifNull(rs.getString(6), Constant.BLANK);
                f = new Formula(1,nRow,quoteDate,new WritableCellFormat(dp));
                s.addCell(f);
                String bid = "="+VerifyNull.ifNull(rs.getString(7), Constant.BLANK);

/ ** Значение в ставке = "BDP (" EURON Curncy "," PX_BID "," DATA") 1";* /

                f = new Formula(6,nRow,bid,new WritableCellFormat(dp2));
                s.addCell(f); 

/ ** Значение в предложении = "BDP (" EURON Curncy "," PX_ASK "," DATA ") 1";* /

                String offer = "="+VerifyNull.ifNull(rs.getString(8), Constant.BLANK);
                f = new Formula(7,nRow,offer,new WritableCellFormat(dp2));
                s.addCell(f);
                String timeStamp = VerifyNull.ifNull(rs.getString(9), Constant.BLANK);
                f = new Formula(8,nRow,timeStamp,new WritableCellFormat(dateFormat));
                s.addCell(f);
                nRow++;
            }
            workbook.write();
            workbook.close();

Ответы [ 3 ]

1 голос
/ 02 ноября 2010

Я полагаю, что ваш «особенный успех» заключается в том, что у вас есть плагин с визуальными базовыми функциями для использования формул с ячейками

Я не знаю, поддерживает ли текущая версия макросов JXL или, по крайней мере, не удаляет ее при изменении существующей книги, но в вашем коде вы не обновляете существующую книгу, вы создаете новую

пытались ли вы использовать свой код, открывая существующую книгу, в которой работает функция Visual Basic? (это может быть пустой). Если он работает, вы можете использовать этот файл в качестве шаблона, скопировать его в нужное место, переименовать и отредактировать с помощью JXL

0 голосов
/ 02 ноября 2010

Проблема в том, что мне нужно ввести формулу, которую Excel не сможет найти, потому что мы используем специальный Excel для ее чтения. Мне нужно, чтобы мой код сохранил недопустимую формулу вместо записи = 1 ERROR () в ячейку, чтобы при открытии моего файла с помощью нашего специального Excel он получал значение.

Ваша проблема не в JExcel или POI. Ни один API не сможет помочь вам с формулой, которую нельзя найти.

Что это за «особый успех»? Если это другой файл, просто прочитайте его и используйте.

Ваш вопрос сбивает с толку. Мне трудно понять, что именно происходит. Я голосую, чтобы закрыть, если вы не можете уточнить.

0 голосов
/ 02 ноября 2010

Извините, у меня есть время только для быстрого ответа, но вы смотрели на Apache POI вообще? Его API может быть вам полезен.

Однако я не уверен на 100%, что это для написания Excel, так как я думаю, что его основное применение - чтение файлов MS Office. Тем не менее, возможно, стоит посмотреть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...