Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / PHPExcel библиотека / 7 сообщений из 7, страница 1 из 1
01.03.2016, 12:44
    #39182402
l-freeman
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHPExcel библиотека
Добрый день, знатоки

занимаюсь гавнокодерством, переношу данные с запроса к оракл БД в ексель, и наткнулся на проблему:

в одной столбце результирующего сета с БД находятся числовые значение, которые состоят из 16 цифр, к примеру:
"1234567891011121"

этот набор цифр с БД возвращается в формате строка, но при переносе в ексель получается еспоненциальное число, и последний символ отбрасывается:

Код: php
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.
<?php

error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);


$conn = oci_connect("temp", "temp", "temp/temp");


if (!$conn) {
    $e = oci_error();
    trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
}


require_once dirname(__FILE__) . '/../Classes/PHPExcel.php';



$sql = "select to_char('1234567891011121') t1
		from dual
		union all
		select to_char('1234567891011122') t1
		from dual
		";


$stid = oci_parse($conn, $sql);

oci_execute($stid);


$objPHPExcel = PHPExcel_IOFactory::load('temp.xlsx');
$objPHPExcel->getSheet(0);


	$i = 0;	
	while (oci_fetch($stid)) {
	
	
	for ($start_row=0;$start_row<19;$start_row++){
			$objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow($start_row, $i+2, oci_result($stid,$start_row+1));
		}

	

	

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->save(str_replace('read2.php', 'temp_result.xlsx', __FILE__));	

oci_free_statement($stid);
oci_close($conn);




?>



и в итоге получаю вот такую вот лобуду: 1,23457E+15


пробовал ставить формат поля в загружаемом файле - текстовый, strval для oci_result, ничего не помогает



я так понимаю, ексель производит устранение ошибок, когда число сохранено как текст, но как это изменить?

может кто то сталкивался, помогите, измаялся

заранее спасибо
...
Рейтинг: 0 / 0
01.03.2016, 12:51
    #39182427
ScareCrow
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHPExcel библиотека
автор$objPHPExcel->getActiveSheet()
->getStyle('A1')
->getNumberFormat()
->setFormatCode(
PHPExcel_Style_NumberFormat::FORMAT_TEXT
);
...
Рейтинг: 0 / 0
01.03.2016, 13:00
    #39182444
l-freeman
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHPExcel библиотека
ScareCrow,
в самом файле ексель, который через лоадер загружается, поле имеет формат - "Текстовое"


но попробовал, изменений нет
как был експоненциальный формат, так и остался:

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
$objPHPExcel = PHPExcel_IOFactory::load('Foxtrot_clients.xlsx');
$objPHPExcel->getSheet(0);

$objPHPExcel->getActiveSheet()
->getStyle('A2')
->getNumberFormat()
->setFormatCode(
PHPExcel_Style_NumberFormat::FORMAT_TEXT
);



ЗЫ у меня А1 - это ячейка, которая содержит шапку, соответственно смотрел для А2
...
Рейтинг: 0 / 0
01.03.2016, 13:01
    #39182447
l-freeman
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHPExcel библиотека
я так думаю, помогло бы что то на подобии специальной вставки, но как это реализовано в библиотеке, и реализовано ли вообще - не знаю
...
Рейтинг: 0 / 0
01.03.2016, 13:11
    #39182457
SharuPoNemnogu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHPExcel библиотека
Код: php
1.
$objPHPExcel->getCellByColumnAndRow($start_row, $i+2)->setValueExplicit($value, PHPExcel_Cell_DataType::TYPE_STRING);
...
Рейтинг: 0 / 0
01.03.2016, 13:11
    #39182458
l-freeman
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHPExcel библиотека
l-freemanScareCrow,
в самом файле ексель, который через лоадер загружается, поле имеет формат - "Текстовое"


но попробовал, изменений нет
как был експоненциальный формат, так и остался:

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
$objPHPExcel = PHPExcel_IOFactory::load('Foxtrot_clients.xlsx');
$objPHPExcel->setActiveSheetIndex(0);

$objPHPExcel->getActiveSheet()
->getStyle('A2')
->getNumberFormat()
->setFormatCode(
PHPExcel_Style_NumberFormat::FORMAT_TEXT
);



ЗЫ у меня А1 - это ячейка, которая содержит шапку, соответственно смотрел для А2
...
Рейтинг: 0 / 0
01.03.2016, 13:47
    #39182516
l-freeman
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHPExcel библиотека
SharuPoNemnogu
Код: php
1.
$objPHPExcel->getCellByColumnAndRow($start_row, $i+2)->setValueExplicit($value, PHPExcel_Cell_DataType::TYPE_STRING);




спасибо добрый человек


помогло

только если кто то будет юзать, $objPHPExcel-> getActiveSheet() ->getCellByColumnAndRow($start_row, $i+2)->setValueExplicit
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / PHPExcel библиотека / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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