2015-10-30 16 views
6

Khi ghi dữ liệu của tôi trong tệp Excel với lớp PHPExcel.Ngăn PHPExcel tính giá trị khi ghi vào tệp

này đang xảy ra khi các nhà văn làm việc, không phải khi thêm dữ liệu cho các tế bào $this->sheet->setCellValue()

Fatal error: Uncaught exception 'PHPExcel_Calculation_Exception' with message 'Adressen!AF20955 -> Formula Error: Unexpected operator '>'' in \Cell.php:300 Stack trace: 
#0 \PHPExcel\Worksheet.php(754): PHPExcel_Cell->getCalculatedValue() 
#1 \PHPExcel\Writer\Excel2007\Worksheet.php(373): PHPExcel_Worksheet->calculateColumnWidths() 
#2 \PHPExcel\Writer\Excel2007\Worksheet.php(80): PHPExcel_Writer_Excel2007_Worksheet->_writeCols(Object(PHPExcel_Shared_XMLWriter), Object(PHPExcel_Worksheet)) 
#3 \PHPExcel\Writer\Excel2007.php(304): PHPExcel_Writer_Excel2007_Worksheet->writeWorksheet(Object(PHPExcel_Worksheet), Array, false) 
#4 \excel.php(131): PHPExcel_Writer_Excel2007->save('...') 
#5 \excel. in \PHPExcel\Cell.php on line 300 

tôi không bao giờ sử dụng chức năng PHPExcel_Cell->getCalculatedValue() bằng văn bản cho Excel của tôi, nhưng chỉ $this->sheet->setCellValue('A1', $value).

Tôi không cần tính bất kỳ công thức nào trong tệp Excel của mình. Chỉ cần xuất dữ liệu DB2 vào tệp này.

Nó rõ ràng là có thể là $value chứa các ký tự công thức như = + - > < (như tế bào AF20955 đã gây ra lỗi nghiêm trọng với >) nhưng điều này không nên được hiểu là công thức nhưng chỉ như là một phần của chuỗi. Làm thế nào tôi có thể giải quyết vấn đề?

động cơ tính toán
+0

chính xác giá trị '$ value' khi bạn gặp lỗi này là gì? –

+0

Không có ý tưởng, nó là một lĩnh vực cơ sở dữ liệu, rất khó để tìm ra những gì nó là chính xác .... Nếu nó cần tôi có thể tìm kiếm giá trị – Perocat

+0

sau đó thử/bắt cuộc gọi viết và có bắt nhổ ra bất cứ giá trị '$ 'là vào thời điểm đó. –

Trả lời

8

Các PHPExcel được gọi là theo mặc định khi bạn tiết kiệm, nhưng bạn có thể nói với các nhà văn không để áp dụng nó bằng cách gọi

$objWriter->setPreCalculateFormulas(false); 

trước khi cuộc gọi để lưu


Khi bạn thiết lập một giá trị ô với một cuộc gọi đến setCellValue() hoặc tương tự, PHPExcel sẽ cố gắng xác định kiểu dữ liệu và đặt nó một cách thích hợp trong nội bộ (theo cách giống hệt như MS Excel) bằng cách sử dụng giá trị binder. Các ô có chứa = là ký tự đầu tiên sẽ được coi là công thức bằng cách này.

Nếu bạn muốn đảm bảo rằng chúng được coi là chuỗi thay vì công thức, thì cách tiếp cận dễ nhất là sử dụng setCellValueExplicit() thay thế.

+1

Cảm ơn bạn! Sử dụng 'setCellValueExplicit()' đang hoạt động tốt. Tôi cũng đã thử chỉ sử dụng '$ objWriter-> setPreCalculateFormulas (false);' nhưng lỗi vẫn tồn tại! – Perocat

+2

Nếu bạn đang sử dụng các cột autowidth, thì PHPExcel cần thực hiện bất kỳ công thức nào, ngay cả khi setPreCalculateFormulas được đặt thành false, để tính chiều rộng cột vì dựa trên giá trị được hiển thị thực tế, được hiển thị cho ô –

+0

Cảm ơn người đàn ông! Điều đó giải quyết tất cả các vấn đề của tôi trong khi sử dụng một tập tin mô hình xls. –

Các vấn đề liên quan