|
@@ -19,6 +19,7 @@ type
|
|
|
procedure Import; virtual; abstract;
|
|
|
|
|
|
function GetCellValue(ASheet: TSpreadSheet; ACol, ARow: Integer): Variant;
|
|
|
+ function GetCellTrimText(ASheet: TSpreadSheet; ACol, ARow: Integer): string;
|
|
|
public
|
|
|
constructor Create(AProjectData: TProjectData);
|
|
|
destructor Destroy; override;
|
|
@@ -186,6 +187,12 @@ begin
|
|
|
inherited;
|
|
|
end;
|
|
|
|
|
|
+function TExcelImport.GetCellTrimText(ASheet: TSpreadSheet; ACol,
|
|
|
+ ARow: Integer): string;
|
|
|
+begin
|
|
|
+ Result := Trim(VarToStrDef(GetCellValue(ASheet, ACol, ARow), ''));
|
|
|
+end;
|
|
|
+
|
|
|
function TExcelImport.GetCellValue(ASheet: TSpreadSheet;
|
|
|
ACol, ARow: Integer): Variant;
|
|
|
begin
|
|
@@ -278,19 +285,16 @@ var
|
|
|
Node: TBillsCacheNode;
|
|
|
vValue: Variant;
|
|
|
begin
|
|
|
- with ASheet.Cells do
|
|
|
- begin
|
|
|
- sLevelCode := VarToStrDef(GetValue(FLevelCol, FCurRow), '');
|
|
|
- if sLevelCode = '' then Exit;
|
|
|
+ sLevelCode := GetCellTrimText(ASheet, FLevelCol, FCurRow);
|
|
|
+ if sLevelCode = '' then Exit;
|
|
|
|
|
|
- iFixedID := StrToInt(VarToStrDef(GetValue(FFixedIDCol, FCurRow), '-1'));
|
|
|
- Node := FCacheTree.AddNodeByCode(sLevelCode, iFixedID);
|
|
|
- Node.Code := VarToStrDef(GetValue(FCodeCol, FCurRow), '');
|
|
|
- Node.B_Code := VarToStrDef(GetValue(FB_CodeCol, FCurRow), '');
|
|
|
- Node.Name := VarToStrDef(GetValue(FNameCol, FCurRow), '');
|
|
|
- Node.Units := VarToStrDef(GetValue(FUnitsCol, FCurRow), '');
|
|
|
- Node.CanDelete := VarToIntDef(GetValue(FCanDeleteCol, FCurRow), 0) = 0;
|
|
|
- end;
|
|
|
+ iFixedID := StrToIntDef(GetCellTrimText(ASheet, FFixedIDCol, FCurRow), -1);
|
|
|
+ Node := FCacheTree.AddNodeByCode(sLevelCode, iFixedID);
|
|
|
+ Node.Code := GetCellTrimText(ASheet, FCodeCol, FCurRow);
|
|
|
+ Node.B_Code := GetCellTrimText(ASheet, FB_CodeCol, FCurRow);
|
|
|
+ Node.Name := GetCellTrimText(ASheet, FNameCol, FCurRow);
|
|
|
+ Node.Units := GetCellTrimText(ASheet, FUnitsCol, FCurRow);
|
|
|
+ Node.CanDelete := VarToIntDef(GetCellValue(ASheet, FCanDeleteCol, FCurRow), 0) = 0;
|
|
|
end;
|
|
|
|
|
|
procedure TBillsExcelImport.LoadNodes(ASheet: TSpreadSheet);
|
|
@@ -476,10 +480,10 @@ var
|
|
|
vValue: Variant;
|
|
|
iFixedID: Integer;
|
|
|
begin
|
|
|
- sLevelCode := VarToStrDef(GetCellValue(ASheet, FLevelCol, FCurRow), '');
|
|
|
- sCode := VarToStrDef(GetCellValue(ASheet, FCodeCol, FCurRow), '');
|
|
|
- sB_Code := VarToStrDef(GetCellValue(ASheet, FB_CodeCol, FCurRow), '');
|
|
|
- sName := VarToStrDef(GetCellValue(ASheet, FNameCol, FCurRow), '');
|
|
|
+ sLevelCode := GetCellTrimText(ASheet, FLevelCol, FCurRow);
|
|
|
+ sCode := GetCellTrimText(ASheet, FCodeCol, FCurRow);
|
|
|
+ sB_Code := GetCellTrimText(ASheet, FB_CodeCol, FCurRow);
|
|
|
+ sName := GetCellTrimText(ASheet, FNameCol, FCurRow);
|
|
|
|
|
|
// 含层次编号时,层次编号为空不导入
|
|
|
// 不含层次编号时,仅导入第一部分,且项目节编号、清单编号均未空时不导入
|
|
@@ -523,16 +527,16 @@ begin
|
|
|
FFixedIDNodes.Add(Node);
|
|
|
end;
|
|
|
|
|
|
- Node.Code := VarToStrDef(GetCellValue(ASheet, FCodeCol, FCurRow), '');
|
|
|
- Node.B_Code := VarToStrDef(GetCellValue(ASheet, FB_CodeCol, FCurRow), '');
|
|
|
- Node.Name := VarToStrDef(GetCellValue(ASheet, FNameCol, FCurRow), '');
|
|
|
- Node.Units := VarToStrDef(GetCellValue(ASheet, FUnitsCol, FCurRow), '');
|
|
|
+ Node.Code := sCode;
|
|
|
+ Node.B_Code := sB_Code;
|
|
|
+ Node.Name := sName;
|
|
|
+ Node.Units := GetCellTrimText(ASheet, FUnitsCol, FCurRow);
|
|
|
Node.Price := StrToFloatDef(VarToStrDef(GetCellValue(ASheet, FPriceCol, FCurRow), ''), 0);
|
|
|
Node.Quantity := StrToFloatDef(VarToStrDef(GetCellValue(ASheet, FQuantityCol, FCurRow), ''), 0);
|
|
|
Node.DgnQuantity1 := StrToFloatDef(VarToStrDef(GetCellValue(ASheet, FDgnQuantity1Col, FCurRow), ''), 0);
|
|
|
Node.DgnQuantity2 := StrToFloatDef(VarToStrDef(GetCellValue(ASheet, FDgnQuantity2Col, FCurRow), ''), 0);
|
|
|
- Node.DrawingCode := VarToStrDef(GetCellValue(ASheet, FDrawingCol, FCurRow), '');
|
|
|
- Node.MemoStr := VarToStrDef(GetCellValue(ASheet, FMemoCol, FCurRow), '');
|
|
|
+ Node.DrawingCode := GetCellTrimText(ASheet, FDrawingCol, FCurRow);
|
|
|
+ Node.MemoStr := GetCellTrimText(ASheet, FMemoCol, FCurRow);
|
|
|
end;
|
|
|
|
|
|
procedure TBillsEdtExcelImport.LoadNodes(ASheet: TSpreadSheet);
|
|
@@ -598,13 +602,16 @@ end;
|
|
|
|
|
|
procedure TBillsPriceExcelImport.BeginImport;
|
|
|
begin
|
|
|
+ ShowProgressHint('导入Excel清单单价', 100);
|
|
|
FProjectData.BillsData.sddBills.BeginUpdate;
|
|
|
end;
|
|
|
|
|
|
procedure TBillsPriceExcelImport.EndImport;
|
|
|
begin
|
|
|
FProjectData.BillsData.sddBills.EndUpdate;
|
|
|
+ UpdateProgressHint('正在计算导入后的数据');
|
|
|
FProjectData.BillsCompileData.CalculateAll;
|
|
|
+ CloseProgressHint;
|
|
|
end;
|
|
|
|
|
|
procedure TBillsPriceExcelImport.Import;
|
|
@@ -634,19 +641,25 @@ procedure TBillsPriceExcelImport.ImportBillsPriceData(ASheet: TSpreadSheet);
|
|
|
end;
|
|
|
|
|
|
var
|
|
|
+ iPos: Integer;
|
|
|
sB_Code: string;
|
|
|
fPrice: Double;
|
|
|
begin
|
|
|
+ UpdateProgressHint('写入读取的Excel数据');
|
|
|
+ UpdateProgressPosition(0);
|
|
|
while (FCurRow < ASheet.Cells.UsedRowCount) do
|
|
|
begin
|
|
|
- sB_Code := VarToStrDef(ASheet.Cells.GetValue(FB_CodeCol, FCurRow), '');
|
|
|
+ sB_Code := GetCellTrimText(ASheet, FB_CodeCol, FCurRow);
|
|
|
if (sB_Code <> '') and CheckIsBillsCode(sB_Code) then
|
|
|
begin
|
|
|
fPrice := StrToFloatDef(VarToStrDef(ASheet.Cells.GetValue(FPriceCol, FCurRow), ''), 0);
|
|
|
UpdateBillsPrice(sB_Code, fPrice);
|
|
|
end;
|
|
|
Inc(FCurRow);
|
|
|
+ iPos := FCurRow * 100 div ASheet.Cells.UsedRowCount;
|
|
|
+ UpdateProgressPosition(iPos);
|
|
|
end;
|
|
|
+ UpdateProgressPosition(100);
|
|
|
end;
|
|
|
|
|
|
procedure TBillsPriceExcelImport.LoadColumnsFromHead(ASheet: TSpreadSheet);
|
|
@@ -661,7 +674,7 @@ begin
|
|
|
begin
|
|
|
for iCol := 0 to ASheet.Cells.UsedColCount do
|
|
|
begin
|
|
|
- sColName := VarToStrDef(ASheet.Cells.GetValue(iCol, FCurRow), '');
|
|
|
+ sColName := GetCellTrimText(ASheet, iCol, FCurRow);
|
|
|
if SameText(sColName, '清单编号') or SameText(sColName, '子目号') then
|
|
|
FB_CodeCol := iCol
|
|
|
else if SameText(sColName, '名称') then
|
|
@@ -727,7 +740,7 @@ begin
|
|
|
begin
|
|
|
for iCol := 0 to ASheet.Cells.UsedColCount do
|
|
|
begin
|
|
|
- sColName := VarToStrDef(ASheet.Cells.GetValue(iCol, FCurRow), '');
|
|
|
+ sColName := GetCellTrimText(ASheet, iCol, FCurRow);
|
|
|
if SameText(sColName, '清单编号') or SameText(sColName, '子目号') then
|
|
|
FB_CodeCol := iCol
|
|
|
else if SameText(sColName, '名称') then
|
|
@@ -771,23 +784,20 @@ var
|
|
|
begin
|
|
|
while (FCurRow < ASheet.Cells.UsedRowCount) do
|
|
|
begin
|
|
|
- sB_Code := VarToStrDef(ASheet.Cells.GetValue(FB_CodeCol, FCurRow), '');
|
|
|
+ sB_Code := GetCellTrimText(ASheet, FB_CodeCol, FCurRow);
|
|
|
if (sB_Code <> '') and CheckIsBillsCode(sB_Code) then
|
|
|
begin
|
|
|
Rec := FProjectData.DealBillsData.sddDealBills.Add;
|
|
|
Rec.ValueByName('ID').AsInteger := FBillsID;
|
|
|
Rec.ValueByName('B_Code').AsString := sB_Code;
|
|
|
- with ASheet.Cells do
|
|
|
- begin
|
|
|
- Rec.ValueByName('Name').AsString := VarToStrDef(GetValue(FNameCol, FCurRow), '');
|
|
|
- Rec.ValueByName('Units').AsString := VarToStrDef(GetValue(FUnitsCol, FCurRow), '');
|
|
|
- Rec.ValueByName('Price').AsFloat := PriceRoundTo(
|
|
|
- StrToFloatDef(VarToStrDef(GetValue(FPriceCol, FCurRow), ''), 0));
|
|
|
- Rec.ValueByName('Quantity').AsFloat := QuantityRoundTo(
|
|
|
- StrToFloatDef(VarToStrDef(GetValue(FQuantityCol, FCurRow), ''), 0));
|
|
|
- Rec.ValueByName('TotalPrice').AsFloat := TotalPriceRoundTo(
|
|
|
- StrToFloatDef(VarToStrDef(GetValue(FTotalPriceCol, FCurRow), ''), 0));
|
|
|
- end;
|
|
|
+ Rec.ValueByName('Name').AsString := GetCellTrimText(ASheet, FNameCol, FCurRow);
|
|
|
+ Rec.ValueByName('Units').AsString := GetCellTrimText(ASheet, FUnitsCol, FCurRow);
|
|
|
+ Rec.ValueByName('Price').AsFloat := PriceRoundTo(
|
|
|
+ StrToFloatDef(GetCellTrimText(ASheet, FPriceCol, FCurRow), 0));
|
|
|
+ Rec.ValueByName('Quantity').AsFloat := QuantityRoundTo(
|
|
|
+ StrToFloatDef(GetCellTrimText(ASheet, FQuantityCol, FCurRow), 0));
|
|
|
+ Rec.ValueByName('TotalPrice').AsFloat := TotalPriceRoundTo(
|
|
|
+ StrToFloatDef(GetCellTrimText(ASheet, FTotalPriceCol, FCurRow), 0));
|
|
|
Inc(FBillsID);
|
|
|
end;
|
|
|
Inc(FCurRow);
|
|
@@ -869,14 +879,14 @@ var
|
|
|
begin
|
|
|
with ASheet.Cells do
|
|
|
begin
|
|
|
- sB_Code := VarToStrDef(GetValue(FB_CodeCol, FCurRow), '');
|
|
|
- sName := VarToStrDef(GetValue(FNameCol, FCurRow), '');
|
|
|
+ sB_Code := Trim(VarToStrDef(GetValue(FB_CodeCol, FCurRow), ''));
|
|
|
+ sName := Trim(VarToStrDef(GetValue(FNameCol, FCurRow), ''));
|
|
|
|
|
|
Node := FCacheTree.AddNodeByData(sB_Code, sName);
|
|
|
|
|
|
- Node.B_Code := VarToStrDef(GetValue(FB_CodeCol, FCurRow), '');
|
|
|
- Node.Name := VarToStrDef(GetValue(FNameCol, FCurRow), '');
|
|
|
- Node.Units := VarToStrDef(GetValue(FUnitsCol, FCurRow), '');
|
|
|
+ Node.B_Code := sB_Code;
|
|
|
+ Node.Name := sName;
|
|
|
+ Node.Units := Trim(VarToStrDef(GetValue(FUnitsCol, FCurRow), ''));
|
|
|
Node.Price := StrToFloatDef(VarToStrDef(GetValue(FPriceCol, FCurRow), ''), 0);
|
|
|
Node.Quantity := StrToFloatDef(VarToStrDef(GetValue(FQuantityCol, FCurRow), ''), 0);
|
|
|
end;
|