Редактировать в концеячейки электронной таблицы Форматирование
Может кто-нибудь увидеть, что я делаю неправильно? Это мои ожидания и наблюдения:
Я ожидаю, что рабочий лист с именем Search Parameters будет иметь ячейку a1 жирным шрифтом красного цвета. Я получаю то, что ожидаю.
Я ожидаю рабочий лист под названием «4D, CCCU, SDAU», который имеет данные, начиная с строки 3. Я получаю это.
Я ожидаю, что строка 3 получит текст «жирный шрифт 3 зеленый истинный» и будет выделен жирным шрифтом. Я получаю текст, но получаю полужирный красный шрифт, который соответствует ячейке a1 на другом листе. Фактически, форматирование в этой ячейке всегда будет соответствовать ячейке a1 с другого листа.
Я ожидаю, что оставшиеся ячейки будут иметь значение типа «обычный шрифт 4 синего цвета» и будут выделены жирным шрифтом. Я получаю значения, но не форматирование вообще.
Мои writedumps всегда показывают мне ценности, которые я ожидаю.
Код приведен ниже. AddNewRow - это udf.
Чтобы повторить, возникает вопрос, почему ячейки не форматируют то, как я их ожидаю?
<cfscript>
FileName = "d:\dw\dwweb\work\Antibiotics.xls";
SearchParameters = QueryNew("Item,Value","varchar,varchar");
AddNewRow(SearchParameters, "Item,Value","Date Range,#DateRange#");
SearchParametersSheet = Spreadsheetnew("SearchParameters");
SpreadSheetAddRows(SearchParametersSheet, SearchParameters);
SheetNumber = 1;
DrugsByCategory = QueryNew("Item,font","varchar,varchar");
format1 = StructNew();
format1.bold = true;
format1.color = "red";
SpreadsheetFormatCell(SearchParametersSheet, format1, 1, 1);
</cfscript>
<cfspreadsheet action="write" filename="#FileName#"
name="SearchParametersSheet"
sheet=1 sheetname="Search Parameters" overwrite=true>
<cfoutput query="AllDrugs" group="CategoryName">
<cfset AddNewRow(DrugsByCategory,"Item#Chr(30)#font"
,"#CategoryName##Chr(30)#bold",Chr(30))>
<cfoutput>
<cfset AddNewRow(DrugsByCategory,"Item#Chr(30)#font"
,"#StandardSpelling##Chr(30)#normal",Chr(30))>
</cfoutput>
</cfoutput>
<cfquery name="units" dbtype="query">
select distinct unit
from initialresults
</cfquery>
<cfloop query="units">
<cfscript>
SheetNumber ++;
ThisSpreadSheet = SpreadSheetNew(unit);
RowNumber = 3;
for (i = 1; i <= DrugsByCategory.recordcount; i ++) {
// note that the data might contain commas, so we have to use two commands
SpreadsheetAddRow(ThisSpreadSheet, "", RowNumber, 1);
SpreadSheetSetCellValue(ThisSpreadSheet, DrugsByCategory.Item[i], RowNumber, 1);
if (DrugsByCategory.font[i] == "bold"){
format1.bold = true;
format1.color = "green";
writedump(var="#format1#" label="#RowNumber#");
SpreadSheetSetCellValue(ThisSpreadSheet
, "bold font #Rownumber# #format1.color# #format1.bold#"
, RowNumber, 1);
SpreadsheetFormatCell(ThisSpreadSheet, format1, RowNumber, 1);
}
else {
format1.color = "blue";
format1.bold = true;
writedump(var="#format1#" label="#RowNumber#");
SpreadSheetSetCellValue
(ThisSpreadSheet, "normal font
#Rownumber# #format1.color# #format1.bold#"
, RowNumber, 1);
SpreadsheetFormatCell(ThisSpreadSheet, format1, RowNumber, 1);
}
RowNumber ++;
}
</cfscript>
<cfspreadsheet action="update" filename="#FileName#" name="ThisSpreadSheet"
sheet=#SheetNumber# sheetname="#unit#" >
</cfloop>
Edit начинается здесь
Это самодостаточный код Leigh предложил. Рекомендации Travis для метода wrt format закомментированы, но когда я их использовал, результаты не изменились.
<cfscript>
Sheet1 = Spreadsheetnew("Sheet1");
SpreadSheetAddRow(Sheet1, "fred");
SheetNumber = 1;
Format = {};
format.bold = true;
format.color = "blue";
MYfile = "d:\dw\dwtest\dan\abc.xls";
writedump(format);
SpreadsheetFormatCell(Sheet1, Format, 1, 1);
Values = "a,b,a,b";
</cfscript>
<cfspreadsheet action="write" filename="#MYFile#" name="Sheet1"
sheet=1 sheetname="fred" overwrite=true>
<cfloop list="a" index="letter">
<cfscript>
RowNumber = 1;
SheetNumber ++;
ThisSheet = SpreadSheetNew(letter);
for (i = 1; i <= 4; i ++) {
SpreadsheetAddRow(ThisSheet, ListGetAt(Values, i));
if (ListGetAt(Values, i) == "a") {
format.color = "green";
SpreadsheetFormatCell(ThisSheet, Format, RowNumber, 1);
//SpreadsheetFormatCell(ThisSheet, {bold="true",color="green"}, RowNumber, 1);
}
else {
format.color = "red";
SpreadsheetFormatCell(ThisSheet, Format, RowNumber, 1);
//SpreadsheetFormatCell(ThisSheet, {bold="true",color="green"}, RowNumber, 1);
}
RowNumber ++;
}
</cfscript>
<cfspreadsheet action="update" filename="#MYFile#" name="ThisSheet"
sheet="#sheetNumber#" sheetname="#letter#" >
</cfloop>
Результаты: Лист Фреда, как и ожидалось, ярко-синий шрифт в ячейке а1.
В листе a ячейки a1 и a3 имеют букву a жирным шрифтом синего цвета. Я ожидал смелого зеленого цвета. Клетки a2 и a4 имеют букву b, неформатированные. Я ожидал смелого и красного.
Я делаю что-то глупое, или что-то не так. Я использую ColdFusion 9.01 и Excel 2010.
Это поможет, если вы разместите * самодостаточный * пример, который другие могли бы проверить независимо от вашей среды. – Leigh
Хороший совет, но я получаю iterupted. Те, кто заинтересован, должны прекратить эту тему в выходные. –
Вы пытались отправить электронную таблицу прямо в браузер вместо сохранения ее в файл? Интересно, имеет ли 'cfspreadsheet' проблемы' cfpdf'-esque. Вы пробовали использовать статический формат вместо структуры format1? {Bold = "true", color = "green"} ' – Travis