2013-03-21 22 views
7
<cfscript> 
Workbook = Spreadsheetnew("Workbook"); 
SpreadSheetSetCellValue(WorkBook, "4D", 1, 1); 
// displayed 4 
SpreadSheetSetCellValue(WorkBook, "4C", 1, 2); 
// displayed 4C 
SpreadSheetSetCellValue(WorkBook, "4E", 1, 3); 
// displayed 4E 
SpreadSheetSetCellValue(WorkBook, "5C", 1, 4); 
// displayed 5C 
SpreadSheetSetCellValue(WorkBook, "5D", 1, 5); 
// displayed 5 
SpreadSheetSetCellValue(WorkBook, "4d", 1, 6); 
// displayed 4 
MYfile = "d:\dw\dwtest\dan\abc.xls"; 

</cfscript> 
<cfspreadsheet action="write" filename="#MYFile#" name="Workbook" 
    sheet=1 overwrite=true> 

ColdFusion setttings: Version 9,0,1,274733
phiên bản Enterprise
Hệ điều hành Windows 2003
Phiên bản OS 5,2giá trị chữ và số cfspreadsheet kết thúc bằng d

Excel Version Office 2010 Phiên bản 14.0.6129.5000 (32 bit).

Nếu bạn chạy mã này trên hệ thống của mình, bạn có nhận được kết quả tương tự không?

Quan trọng hơn, nếu bạn nhận được kết quả tương tự, bạn có biết phải làm gì không?

Sửa

Kiểm tra chữ có vấn đề khác:

RowNumber = 1; 
for (i = 65; i <= 90; i++){ 
SpreadSheetSetCellValue(WorkBook, chr(i), RowNumber, 1); 
SpreadSheetSetCellValue(WorkBook, "4#chr(i)#", RowNumber, 2); 
RowNumber ++; 
} 

Chuỗi 4F cũng hiển thị số duy nhất.

+0

Các ký tự "D" có thực hiện trong ô không và một số định dạng đang ẩn chúng hoặc là các chữ cái bị thiếu hoàn toàn? –

+0

Họ hoàn toàn mất tích. –

+0

Các ký tự D bị thiếu, tôi đã chạy vào điều này trước đây và giải pháp duy nhất tôi đưa ra là chỉnh sửa thủ công sau khi bảng tính được tạo. Mà làm việc như nó là một báo cáo một lần. – Busches

Trả lời

3

Vấn đề ở đây là POI diễn giải F và D dưới dạng hậu tố chính xác đơn/đôi mà Java có. Xem tài liệu here.

Tôi có thể nói đây là một lỗi với CF, như CFML không có khái niệm về các hậu tố (hoặc thực sự khái niệm nổi chính xác đơn hoặc kép), vì vậy nó nên chắc chắn rằng chuỗi đó được điều trị như dây khi được chuyển đến POI.

+0

Lol, tôi đã nói chính xác điều tương tự trong các nhận xét trước đó, nhưng đã xóa nó sau khi nhận ra liên kết của @ Miguel-F đã chỉ ra điều đó. Tôi nghĩ chắc chắn anh ấy sẽ đăng nó như một câu trả lời. Oh well ... quá muộn :) Bạn đánh bại anh ta với nó! – Leigh

+0

Chết tiệt. Tôi ước gì tôi đã nhìn thấy liên kết: Tôi có thể tiết kiệm cho tôi một số thời gian R & D. –

0

Nếu Miguel trả lời, tôi sẽ đánh dấu là chính xác. Mục đích của câu trả lời này là để cho thấy nhiều thứ khác nhau mà tôi đã thử và cách chúng hóa ra.

<cfoutput> 
<cfscript> 
Workbook = Spreadsheetnew("Workbook"); 
RowNumber = 1; 
for (i = 1; i <= 26; i++){ 
ThisUpperCaseLetter = chr(i + 64); 
ThisLowerCaseLetter = chr(i + 96); 
SpreadSheetSetCellValue(WorkBook, ThisUpperCaseLetter, RowNumber, 1); 
SpreadSheetSetCellValue(WorkBook, "4#ThisUpperCaseLetter#", RowNumber, 2); 
SpreadSheetSetCellValue(WorkBook, ThisLowerCaseLetter, RowNumber, 3); 
SpreadSheetSetCellValue(WorkBook, "4#ThisLowerCaseLetter#", RowNumber, 4); 
SpreadSheetSetCellValue(WorkBook, "'4#ThisLowerCaseLetter#'", RowNumber, 5); 
// SpreadSheetSetCellFormula(WorkBook, "'4#ThisLowerCaseLetter#'", RowNumber, 6); 
/* 
The line above threw this error 
org.apache.poi.ss.formula.FormulaParser$FormulaParseException: 
Parse error near char 0 ''' in specified formula ''4a''. 
Expected number, string, or defined name 
*/ 

SpreadSheetSetCellValue(WorkBook, """4#ThisLowerCaseLetter#""", RowNumber, 6); 
SpreadSheetSetCellValue(WorkBook, "\'4#ThisLowerCaseLetter#\'", RowNumber, 7); 
     // the next line is the only one that will achieve the desired result 
SpreadSheetSetCellFormula(WorkBook, """4#ThisLowerCaseLetter#""", RowNumber, 8); 
RowNumber ++; 
} 
MYfile = "d:\dw\dwtest\dan\abc.xls"; 

</cfscript> 
</cfoutput> 
<cfspreadsheet action="write" filename="#MYFile#" name="Workbook" 
    sheet=1 overwrite=true> 

Bất kỳ thứ gì có bảng tínhCellValue sẽ hiển thị dấu ngoặc kép, cộng với dấu gạch chéo ngược tôi đã cố gắng để thoát chúng. Như đã nêu ở trên, SpreadsheetSetCellFormula với dấu ngoặc kép là cách duy nhất xuất hiện để cho kết quả mong đợi 100% thời gian.

Thông tin khác Trong ứng dụng thực tế của tôi, tôi sử dụng cfheader/cfcontent để cung cấp tệp. Nếu tôi chọn Mở, với IE9, Excel sẽ hiển thị cảnh báo nội dung nguy hiểm và cung cấp cho tôi nút để Bật Chỉnh sửa. Ngoài ra, bất kỳ ô nào được tạo bằng SpreadSheetSetCellFormula() hiển thị số 0. Chọn ô sẽ hiển thị giá trị thực trong hộp giá trị excel hoặc bất kỳ thứ gì được gọi. Ngoài ra, việc bật chỉnh sửa sẽ hiển thị các giá trị mong muốn.

+0

Chỉ cần đánh dấu câu trả lời này hoặc câu trả lời khác là chính xác. Không thực sự câu trả lời của tôi anyway, tôi chỉ tìm thấy nó. Vui mừng nó đã làm việc cho bạn. –

+0

Dan - Chỉ cần tò mò, bất kỳ thay đổi nào nếu bạn định dạng ô dưới dạng văn bản đầu tiên? Có lẽ không, tôi nghi ngờ CF chuyển đổi '4d' thành một số trước đó. Nhưng đáng để bắn. – Leigh

+0

Leigh - Điều đó cũng có thể hoạt động. Không biết nếu bạn nhìn thấy nó nhưng có một tham chiếu trong bài mà tôi tham chiếu đến một giải pháp tương tự. Xem câu trả lời ở đây http://stackoverflow.com/questions/3081202/how-to-format-spreadsheet-columns-using-coldfusion –

1

Sử dụng mã gốc của Dan để kiểm tra nhân vật phiền tôi cập nhật nó để tìm kiếm các ký tự (sử dụng bằng cách thêm vào trước hoặc nối đến các văn bản nhất định) để che giấu tính năng ColdFusion này:

WorkBook = spreadsheetNew('Test', true); 
RowNumber = 1; 
for (i = 1; i <= 255; i++){ 
    SpreadSheetSetCellValue(WorkBook, i, RowNumber, 1); 

    // what character are we displaying 
    SpreadSheetSetCellValue(WorkBook, chr(i), RowNumber, 2); 

    // see if appending chr(i) allows 4F to display 
    SpreadSheetSetCellValue(WorkBook, "4F#chr(i)#", RowNumber, 3); 

    // see if appending chr(i) allows 4F to display 
    SpreadSheetSetCellValue(WorkBook, "#chr(i)#4F", RowNumber, 4); 
    RowNumber ++; 
} 

Hóa ra thêm vào trước hoặc nối các ký tự không in được (127) và chr (160) duy trì bản trình bày của 4F hoặc 4D.

0

FWIW, CF11 + đã giới thiệu thuộc tính datatype mới cho SpreadSheetSetCellValue.Sử dụng loại "chuỗi" giữ nguyên giá trị ban đầu và tạo ra kết quả mong đợi, tức là "4D"

SpreadSheetSetCellValue(WorkBook, "4D", 1, 1, "string"); 
Các vấn đề liên quan