报表还是不够灵活,不够好用。特别是当项目内容过多,显示的数值过长时候都会用##替代,而打印不出来。
而且定宽,定高,不方便调整。我们开发的辛苦,客户用的也不舒服。
双方都不爽,最后弄了个Excel,算是解决了这个问题。
先要弄个Excel模板文件,然后把数据内容逐个填充到单元格即可,客户爱拖爱调,那就是他的事了。
续上篇,调用接收参数报表类。
public class ReportRun extends ObjectRun{ int g_Year; PurchYearCollectTable g_PurchYCTable; Array g_Arr; SysExcelApplication excel; SysExcelWorkbooks books; SysExcelWorkbook book; SysExcelWorksheets sheets; SysExcelWorksheet sheet; SysExcelCells cells; SysExcelCell cell; SysExcelRange columns; SysExcelRange column; COM range,row; FileName fileName; int rowNum; real pricesCount; private void excelHead() { container m_Title; ; cell = cells.item( 1 , 5 ); m_Title = this .read(cell); cell.value(strfmt(conpeek (m_Title, 1 ),g_Year)); } private void excelTable() { PurchYearCollect m_PurchYearC; int i,arrLeng,rowN,rowR; ; rowN = 4 ; arrLeng = g_Arr.lastIndex() + 1 ; for (i = 1 ;i < arrLeng;i ++ ) { m_PurchYearC = g_Arr.value(i); if (rowN > 5 ) { range = sheet.range(strfmt( " A%1:N%1 " ,rowN - 1 )).comObject(); row = range.EntireRow(); row.copy(); row.insert(); } cell = cells.item(rowN, 1 ); cell.value(m_PurchYearC.getItemName()); cell = cells.item(rowN, 2 ); cell.value(m_PurchYearC.getPrice( 1 )); cell = cells.item(rowN, 3 ); cell.value(m_PurchYearC.getPrice( 2 )); cell = cells.item(rowN, 4 ); cell.value(m_PurchYearC.getPrice( 3 )); cell = cells.item(rowN, 5 ); cell.value(m_PurchYearC.getPrice( 4 )); cell = cells.item(rowN, 6 ); cell.value(m_PurchYearC.getPrice( 5 )); cell = cells.item(rowN, 7 ); cell.value(m_PurchYearC.getPrice( 6 )); cell = cells.item(rowN, 8 ); cell.value(m_PurchYearC.getPrice( 7 )); cell = cells.item(rowN, 9 ); cell.value(m_PurchYearC.getPrice( 8 )); cell = cells.item(rowN, 10 ); cell.value(m_PurchYearC.getPrice( 9 )); cell = cells.item(rowN, 11 ); cell.value(m_PurchYearC.getPrice( 10 )); cell = cells.item(rowN, 12 ); cell.value(m_PurchYearC.getPrice( 11 )); cell = cells.item(rowN, 13 ); cell.value(m_PurchYearC.getPrice( 12 )); rowN ++ ; } rowN += 3 ; rowR = rowN + 1 ; for (i = 1 ;i < arrLeng;i ++ ) { m_PurchYearC = g_Arr.value(i); if (rowN > rowR) { range = sheet.range(strfmt( " A%1:M%1 " ,rowN - 1 )).comObject(); row = range.EntireRow(); row.copy(); row.insert(); } cell = cells.item(rowN, 1 ); cell.value(m_PurchYearC.getItemName()); cell = cells.item(rowN, 2 ); cell.value(m_PurchYearC.getRate( 1 )); cell = cells.item(rowN, 3 ); cell.value(m_PurchYearC.getRate( 2 )); cell = cells.item(rowN, 4 ); cell.value(m_PurchYearC.getRate( 3 )); cell = cells.item(rowN, 5 ); cell.value(m_PurchYearC.getRate( 4 )); cell = cells.item(rowN, 6 ); cell.value(m_PurchYearC.getRate( 5 )); cell = cells.item(rowN, 7 ); cell.value(m_PurchYearC.getRate( 6 )); cell = cells.item(rowN, 8 ); cell.value(m_PurchYearC.getRate( 7 )); cell = cells.item(rowN, 9 ); cell.value(m_PurchYearC.getRate( 8 )); cell = cells.item(rowN, 10 ); cell.value(m_PurchYearC.getRate( 9 )); cell = cells.item(rowN, 11 ); cell.value(m_PurchYearC.getRate( 10 )); cell = cells.item(rowN, 12 ); cell.value(m_PurchYearC.getRate( 11 )); cell = cells.item(rowN, 13 ); cell.value(m_PurchYearC.getRate( 12 )); rowN ++ ; } excel.visible( true ); } Container read(SysExcelCell sysExcelCell) { container line; int intvalue; real realvalue; ; switch (sysExcelCell.value().variantType()) { case COMVariantType::VT_EMPTY: line += 0 ; break ; case COMVariantType::VT_I1: line += sysExcelCell.value(). char (); break ; case COMVariantType::VT_I2: line += sysExcelCell.value(). short (); break ; case COMVariantType::VT_I4: intValue = sysExcelCell.value(). int (); if (intValue == 0 ) { intValue = sysExcelCell.value(). long (); } line += intValue; break ; case COMVariantType::VT_UI1: line += sysExcelCell.value(). byte (); break ; case COMVariantType::VT_UI2: line += sysExcelCell.value().uShort(); break ; case COMVariantType::VT_UI4: intValue = sysExceLCell.value().uInt(); if (intValue == 0 ) { intValue = sysExcelCell.value().uLong(); } line += intValue; break ; case COMVariantType::VT_R4 : realValue = sysExcelCell.value(). float (); line += realValue; break ; case COMVariantType::VT_R8 : realValue = sysExcelCell.value(). double (); line += realValue; break ; case COMVariantType::VT_DECIMAL : realValue = sysExcelCell.value(). decimal (); line += realValue; break ; case COMVariantType::VT_BSTR : line += SysExcelCell.value().bstr(); break ; default : throw error(strfmt( " @SYS26908 " , sysExcelCell.value().variantType())); } return line; } private void excelImport() { FilenameOpen m_file; VendParameters m_parameter; ; select firstonly m_parameter; m_file = m_parameter.PurchYearPrintModel; excel = SysExcelApplication::construct(); books = excel.workbooks(); if ( ! books.open(m_file)) return ; if ( ! books.count()) { info( " no content! " ); return ; } book = books.item( 1 ); sheets = book.worksheets(); sheet = sheets.itemFromNum( 1 ); cells = sheet.cells(); } private void PriceRedution() { PurchLineView m_PurchLineView; utcDateTime m_BeginTime,m_EndTime,m_BeginYear; Date m_BeginDate,m_EndDate; int i,r; real downPrice,total,lastPrice; str m_ItemName; MainTypeTable m_MainType; PurchYearCollect m_PurchYear; PurchLine m_PurchLine,t_PurchLine; real tmpPrice,tmpQty; ; g_Arr = new Array(Types::Class); r = 1 ; m_BeginYear = DateTimeUtil::newDateTime(mkdate( 1 , 1 ,g_Year), 0 ); while select m_MainType { m_PurchYear = new PurchYearCollect(); m_PurchYear.setItemName(m_MainType.Name); m_BeginDate = mkdate( 1 , 1 ,g_Year); m_EndDate = mkdate( 31 , 1 ,g_Year); for (i = 1 ;i < 13 ;i ++ ) { m_BeginTime = DateTimeUtil::newDateTime(m_BeginDate, 0 ); m_EndTime = DateTimeUtil::newDateTime(m_EndDate, 3600 * 24 - 1 ); total = 0 ; downPrice = 0 ; // while select sum(PurchQty) from m_PurchLineView // group by m_PurchLineView.MainTypeId // where m_PurchLineView.createdDateTime1 > m_BeginTime && m_PurchLineView.createdDateTime1 < m_EndTime // && m_PurchLineView.MainTypeId == m_MainType.MainTypeId // { while select m_PurchLineView where m_PurchLineView.createdDateTime > m_BeginTime && m_PurchLineView.createdDateTime < m_EndTime && m_PurchLineView.MainTypeId == m_MainType.MainTypeId { lastPrice = 0 ; while select firstonly t_PurchLine order by t_PurchLine.createdDateTime desc where t_PurchLine.ItemId == m_PurchLineView.ItemId && t_PurchLine.createdDateTime < m_BeginYear { lastPrice = t_PurchLine.PurchPrice; } if ( ! t_PurchLine) { while select firstonly t_PurchLine order by t_PurchLine.createdDateTime asc where t_PurchLine.ItemId == m_PurchLineView.ItemId { lastPrice = t_PurchLine.PurchPrice; } } tmpPrice = m_PurchLineView.PurchPrice; tmpQty = m_PurchLineView.PurchQty; downPrice += (tmpPrice - lastPrice) * tmpQty; total += tmpPrice * tmpQty; } // } m_BeginDate = nextmth(m_BeginDate); m_EndDate = endmth(nextmth(m_EndDate)); m_PurchYear.setPrice(i,downPrice); m_PurchYear.setTotal(i,total); } g_Arr.value(r,m_PurchYear); ++ r; } } public boolean fetch() { ; this .excelImport(); this .excelHead(); this .excelTable(); throw "" ; // 出处抛出空异常,报表最后就不显示 return false ; } public void init() { PurYearClass m_PurYear; ; super(); m_PurYear = element.args().caller(); g_Year = m_PurYear.getYear(); Title.text(strfmt( " @SYS1303 " ,g_Year)); this .PriceRedution(); // 技术月降价汇总的方法 }}
转载于:https://www.cnblogs.com/Kurodo/archive/2011/08/15/2139750.html