2010-05-18 57 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「。