Import Excel Format
codeunit 59900 ImportExcel
{ procedure ImportExcelData(var Rec: Record "Sales Line") var InStream: InStream; FromFile: Text; SheetName: Text; begin //This procedure allows you to upload a file to Business Central UploadIntoStream('Select the Excel file to Import', '', '', FromFile, InStream); if FromFile = '' then Error('File not found'); SheetName := ExcelBufferTemp.SelectSheetsNameStream(InStream); //Subsequently, it loads the Excel Buffer data type with the information from the excel file. ExcelBufferTemp.Reset(); ExcelBufferTemp.DeleteAll(); ExcelBufferTemp.OpenBookStream(InStream, SheetName); ExcelBufferTemp.ReadSheet(); //And finally, it invokes the procedure that will allow obtaining the information from each cell of the excel //file and inserting it into the Sales Lines. InsertExcelData(Rec); end; local procedure InsertExcelData(var Rec: Record "Sales Line") var SalesLine: Record "Sales Line"; RowNo, MaxRowNo : Integer; begin RowNo := 0; MaxRowNo := 0; //To know how many lines we are going to iterate over, we calculate the value of the last line ExcelBufferTemp.Reset(); if ExcelBufferTemp.FindLast() then begin MaxRowNo := ExcelBufferTemp."Row No."; end; //We iterate from line or row 2, since the first one is the Headers. for RowNo := 2 to MaxRowNo do begin SalesLine.Init(); SalesLine."Document Type" := "Sales Document Type"::Order; //With the GetValueAt Cell procedure we obtain the information from each cell //and then create the information from each Sales Line that we will insert. Evaluate(SalesLine."Document No.", GetValueAtCell(RowNo, 1)); Evaluate(SalesLine."Line No.", GetValueAtCell(RowNo, 2)); SalesLine.Validate(Type, GetType(GetValueAtCell(RowNo, 3))); SalesLine.Validate("No.", GetValueAtCell(RowNo, 4)); SalesLine.Validate("Location Code", GetValueAtCell(RowNo, 5)); Evaluate(SalesLine.Quantity, GetValueAtCell(RowNo, 6)); Evaluate(SalesLine."Unit Price", GetValueAtCell(RowNo, 7)); if Rec."Document No." <> SalesLine."Document No." then Error('The Document No%1 of line %2 is different from the Document No%3 of the Header', SalesLine."Document No.", SalesLine."Line No.", Rec."Document No."); if not SalesLine.Insert() then SalesLine.Modify(); end; end; //Method that allows us to obtain the Type of Sales Line. local procedure GetType(Text: Text): Enum "Sales Line Type" begin case Text of ' ': exit("Sales Line Type"::" "); 'G/L Account': exit("Sales Line Type"::"G/L Account"); 'Item': exit("Sales Line Type"::Item); 'Resource': exit("Sales Line Type"::Resource); 'Fixed Asset': exit("Sales Line Type"::"Fixed Asset"); 'Charge (Item)': exit("Sales Line Type"::"Charge (Item)"); end; Error('The %1 field in the Type column is not valid.', Text); end; //Method that allows us to obtain the information from each cell local procedure GetValueAtCell(RowNo: Integer; ColNo: Integer): Text begin ExcelBufferTemp.Reset(); If ExcelBufferTemp.Get(RowNo, ColNo) then exit(ExcelBufferTemp."Cell Value as Text") else exit(''); end; var ExcelBufferTemp: Record "Excel Buffer" temporary; }
pageextension 59900 "Sales Order Subform IS" extends "Sales Order Subform" { actions { addafter(EditInExcel) { action("&Import") { Caption = 'Import Excel'; Image = ImportExcel; Promoted = true; PromotedCategory = Process; ApplicationArea = All; Visible = true; ToolTip = 'Import data from excel.'; trigger OnAction() var ImportExcel: Codeunit ImportExcel; begin ImportExcel.ImportExcelData(Rec); end; } } } }
No comments:
Post a Comment