2010-05-18 44 views
0

我有一段代码,我使用它来格式化Excel中的单元格范围。它可以在Excel 2007中正常工作,但是当范围只有1列宽,并且它是Excel 2003而不是2007时,我会收到错误信息,说我正在为边框的线条样式分配无效值。使用Delphi的OLE自动化格式化单个Excel列的问题

**诸如“xlInsideHorizo​​ntal”之类的贵重物品,我已将它们声明为具有正确值的CONSTANT。

请帮忙。

procedure formatCells(FRCELLROW, FRCELLCOL, TOCELLROW, TOCELLCOL: Integer; 
         TOPSTYLE, TOPCOLOUR, TOPWEIGHT, 
         BOTTOMSTYLE, BOTTOMCOLOUR, BOTTOMWEIGHT, 
         LEFTSTYLE, LEFTCOLOUR, LEFTWEIGHT, 
         RIGHTSTYLE, RIGHTCOLOUR, RIGHTWEIGHT: Integer; 
         INNERVSTYLE, INNERVCOLOUR, INNERVWEIGHT: Integer; 
         INNERHSTYLE, INNERHCOLOUR, INNERHWEIGHT: Integer; 
         HORIZONTALCELLALIGNMENT: Integer; 
         FontBold: Boolean; 
         NumberFormat: String 
         ); 
    var 
     tmpRange: Variant; 
    begin 
     tmpRange := eclApp.range[eclApp.Cells[FRCELLROW, FRCELLCOL], 
           eclApp.Cells[TOCELLROW, TOCELLCOL]]; 

     tmpRange.Borders[xlEdgeTop].LineStyle := TOPSTYLE; 
     if TOPSTYLE <> xlNone then begin 
      tmpRange.Borders[xlEdgeTop].ColorIndex := TOPCOLOUR; 
      tmpRange.Borders[xlEdgeTop].Weight := TOPWEIGHT; 
     end; //if 
     tmpRange.Borders[xlEdgeBottom].LineStyle := BOTTOMSTYLE; 
     if BOTTOMSTYLE <> xlNone then begin 
      tmpRange.Borders[xlEdgeBottom].ColorIndex := BOTTOMCOLOUR; 
      tmpRange.Borders[xlEdgeBottom].Weight := BOTTOMWEIGHT; 
     end; //if 
     tmpRange.Borders[xlEdgeLeft].LineStyle := LEFTSTYLE; 
     if LEFTSTYLE <> xlNone then begin 
      tmpRange.Borders[xlEdgeLeft].ColorIndex := LEFTCOLOUR; 
      tmpRange.Borders[xlEdgeLeft].Weight := LEFTWEIGHT; 
     end; //if 
     tmpRange.Borders[xlEdgeRight].LineStyle := RIGHTSTYLE; 
     if RIGHTSTYLE <> xlNone then begin 
      tmpRange.Borders[xlEdgeRight].ColorIndex := RIGHTCOLOUR; 
      tmpRange.Borders[xlEdgeRight].Weight := RIGHTWEIGHT; 
     end; //if 
     tmpRange.Borders[xlInsideVertical].LineStyle := INNERVSTYLE; 
     if INNERVSTYLE <> xlNone then begin 
      tmpRange.Borders[xlInsideVertical].ColorIndex := INNERVCOLOUR; 
      tmpRange.Borders[xlInsideVertical].Weight := INNERVWEIGHT; 
     end; //if 
     tmpRange.Borders[xlInsideHorizontal].LineStyle := INNERHSTYLE; 
     if INNERHSTYLE <> xlNone then begin 
      tmpRange.Borders[xlInsideHorizontal].ColorIndex := INNERHCOLOUR; 
      tmpRange.Borders[xlInsideHorizontal].Weight := INNERHWEIGHT; 
     end; //if 
     tmpRange.HorizontalAlignment := HORIZONTALCELLALIGNMENT; 
     tmpRange.Font.Bold := FontBold; 
     tmpRange.NumberFormat := NumberFormat; 
    end; // 

回答

1

同样,如果你指定了“1”行高度,你会得到相同的错误。内部样式用于相邻单元格之间的线条。 “1”列宽度范围没有水平相邻的单元,因此没有垂直的内部线。 Excel 2007可能会忽略无效值,而Excel 2003会引发错误。

在将值传递到“formatCells”过程之前,测试列的数量和行数,如果在这些过程中遇到了“1”,则“xlNone”(-4142)代替“ INNERVSTYLE,INNERVCOLOUR,INNERVWEIGHT“或”INNERHSTYLE,INNERHCOLOUR,INNERHWEIGHT“。