当前位置: 首页 > article >正文

ABAP批量导入Excel数据实战:从文件选择到数据库插入的完整流程

ABAP高效Excel数据导入从基础实现到性能优化的完整指南在企业级SAP系统开发中Excel数据批量导入是每个ABAP开发者必须掌握的技能。无论是期初数据加载、日常业务数据维护还是系统间数据交换高效可靠的数据导入机制都能显著提升工作效率。本文将深入探讨ABAP中Excel数据导入的多种实现方式从基础方法到高级优化技巧帮助开发者构建健壮的数据导入解决方案。1. Excel导入基础标准函数实现ABAP提供了标准函数ALSM_EXCEL_TO_INTERNAL_TABLE作为最基础的Excel导入方式适合快速实现简单需求。以下是典型实现代码DATA: lt_excel_data TYPE STANDARD TABLE OF alsmex_tabline, lt_target TYPE TABLE OF zmm_material_data. * 文件选择对话框 PARAMETERS p_file TYPE rlgrap-filename. AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file. PERFORM frm_get_file_path USING p_file. * 数据读取函数 CALL FUNCTION ALSM_EXCEL_TO_INTERNAL_TABLE EXPORTING filename p_file i_begin_col 1 起始列 i_begin_row 2 跳过标题行 i_end_col 10 结束列 i_end_row 9999 最大行数 TABLES intern lt_excel_data EXCEPTIONS inconsistent_parameters 1 upload_ole 2 OTHERS 3.标准函数的主要限制行数限制最多只能处理9999行数据性能瓶颈大数据量时处理速度较慢格式要求仅支持.xls格式不支持.xlsx提示在实际项目中建议在调用函数前添加文件格式校验逻辑确保用户上传的是正确的Excel文件。2. 突破限制高性能导入方案针对标准函数的局限性业界发展出多种优化方案。以下是三种主流方法的对比方法类型代表技术最大行数处理速度文件格式支持实现复杂度OLE方式ALSM_EXCEL_TO_INTERNAL_TABLE9999慢.xls低分块处理剪贴板分批复制无限制中等.xls中XML解析CL_EHFND_XLSX无限制快.xlsx高2.1 分块处理技术实现通过OLE自动化接口分批次读取Excel数据可以突破9999行的限制FORM frm_import_large_excel USING iv_filename TYPE string CHANGING ct_data TYPE table. DATA: lo_excel TYPE ole2_object, lo_workbook TYPE ole2_object, lo_worksheet TYPE ole2_object. 创建Excel对象 CREATE OBJECT lo_excel Excel.Application. SET PROPERTY OF lo_excel Visible 0. 打开工作簿 CALL METHOD OF lo_excel Workbooks lo_workbook EXPORTING #1 iv_filename. 获取工作表 GET PROPERTY OF lo_workbook Worksheets lo_worksheet EXPORTING #1 1. 第一个工作表 分块读取逻辑 DATA lv_start_row TYPE i VALUE 1. DATA lv_batch_size TYPE i VALUE 5000. WHILE lv_start_row lv_max_row. 设置读取范围 DATA(lv_end_row) lv_start_row lv_batch_size - 1. 使用剪贴板传输数据 PERFORM frm_copy_range USING lo_worksheet lv_start_row lv_end_row. PERFORM frm_paste_to_internal_table CHANGING ct_data. lv_start_row lv_end_row 1. ENDWHILE. 释放资源 CALL METHOD OF lo_excel Quit. FREE OBJECT lo_excel. ENDFORM.2.2 XML解析方案对于.xlsx格式文件采用XML解析方式效率最高。SAP提供的CL_EHFND_XLSX类是最佳选择DATA(xlsx_handler) cl_ehfnd_xlsxget_instance( ). DATA(xstring_excel) cl_openxml_helperload_local_file( iv_filename ). DATA(xlsx_document) xlsx_handler-load_doc( iv_file_data xstring_excel ). 获取第一个工作表 DATA(first_sheet) xlsx_document-get_sheet_by_id( iv_sheet_id 1 ). 获取行列范围 DATA(row_count) first_sheet-get_last_row_number( ). DATA(col_count) first_sheet-get_last_column_number_in_row( 1 ). 逐行读取数据 DO row_count TIMES. DATA(lv_row) sy-index. APPEND INITIAL LINE TO ct_data ASSIGNING FIELD-SYMBOL(fs_line). DO col_count TIMES. DATA(lv_col) sy-index. DATA(lv_value) first_sheet-get_cell_content( EXPORTING iv_row lv_row iv_column lv_col ). ASSIGN COMPONENT lv_col OF STRUCTURE fs_line TO FIELD-SYMBOL(fs_field). fs_field lv_value. ENDDO. ENDDO.性能对比测试数据导入10万行OLE方式约120秒分块处理约60秒XML解析约15秒3. 企业级导入框架设计在实际项目中一个健壮的导入框架应包含以下组件前端界面层文件选择控件模板下载功能进度显示业务逻辑层数据校验引擎数据转换规则错误处理机制持久化层批量插入优化事务控制日志记录3.1 校验机制实现数据校验是导入流程中最关键的环节典型校验包括FORM frm_validate_data CHANGING ct_data TYPE tt_import_data ct_error TYPE tt_error_log. LOOP AT ct_data ASSIGNING FIELD-SYMBOL(fs_data). 必填字段检查 IF fs_data-matnr IS INITIAL. APPEND VALUE #( row sy-tabix field MATNR message 物料编号不能为空 ) TO ct_error. CONTINUE. ENDIF. 数据格式校验 IF fs_data-meins NOT IN gr_valid_units. APPEND VALUE #( row sy-tabix field MEINS message 无效的单位 ) TO ct_error. ENDIF. 业务规则校验 SELECT SINGLE abap_true FROM mara INTO DATA(lv_exists) WHERE matnr fs_data-matnr. IF lv_exists abap_false. APPEND VALUE #( row sy-tabix field MATNR message 物料不存在 ) TO ct_error. ENDIF. ENDLOOP. ENDFORM.3.2 批量插入优化使用INSERT ... FROM TABLE语法可以大幅提升数据库操作效率FORM frm_save_to_db USING it_data TYPE tt_import_data iv_test_run TYPE abap_bool. DATA: lt_mara TYPE TABLE OF mara, lt_makt TYPE TABLE OF makt. 数据准备 LOOP AT it_data ASSIGNING FIELD-SYMBOL(fs_data). APPEND VALUE #( matnr fs_data-matnr mtart fs_data-mtart meins fs_data-meins ) TO lt_mara. APPEND VALUE #( matnr fs_data-matnr spras sy-langu maktx fs_data-maktx ) TO lt_makt. ENDLOOP. 测试运行时不实际保存 CHECK iv_test_run abap_false. 开启批量插入 INSERT mara FROM TABLE lt_mara ACCEPTING DUPLICATE KEYS. IF sy-subrc 0. 错误处理 ENDIF. INSERT makt FROM TABLE lt_makt ACCEPTING DUPLICATE KEYS. ENDFORM.4. 高级技巧与实战经验4.1 内存优化策略处理超大Excel文件时内存管理尤为关键使用分页处理技术每次只加载部分数据到内存及时清空不再使用的内表避免在循环中频繁创建对象FORM frm_process_large_file USING iv_filename TYPE string. DATA: lt_buffer TYPE TABLE OF ty_data. CONSTANTS: lc_page_size TYPE i VALUE 5000. 初始化读取 PERFORM frm_read_excel_page USING iv_filename 1 lc_page_size CHANGING lt_buffer. 分页处理循环 DATA(lv_page) 1. WHILE lt_buffer IS NOT INITIAL. 处理当前页数据 PERFORM frm_process_page USING lt_buffer. 读取下一页 lv_page lv_page 1. PERFORM frm_read_excel_page USING iv_filename (lv_page - 1) * lc_page_size 1 lv_page * lc_page_size CHANGING lt_buffer. ENDWHILE. ENDFORM.4.2 异步处理模式对于耗时较长的导入任务建议采用异步处理用户上传文件后立即返回后台作业处理实际导入通过邮件或消息通知结果FORM frm_schedule_background_job USING iv_filename TYPE string. DATA: lv_jobname TYPE tbtcjob-jobname VALUE EXCEL_IMPORT, lv_jobcount TYPE tbtcjob-jobcount. CALL FUNCTION JOB_OPEN EXPORTING jobname lv_jobname IMPORTING jobcount lv_jobcount. SUBMIT zmmr_excel_import WITH p_file iv_filename VIA JOB lv_jobname NUMBER lv_jobcount AND RETURN. CALL FUNCTION JOB_CLOSE EXPORTING jobname lv_jobname jobcount lv_jobcount. 记录作业信息供后续查询 INSERT zbg_import_log VALUES ( VALUE #( uuid cl_system_uuidcreate_uuid_x16_static( ) filename iv_filename jobname lv_jobname jobcount lv_jobcount status Scheduled crdate sy-datum crtime sy-uzeit ) ). ENDFORM.4.3 常见问题排查问题1导入的数值字段出现前导零丢失解决方案对物料编号等字符型数字字段进行处理 CALL FUNCTION CONVERSION_EXIT_ALPHA_INPUT EXPORTING input fs_data-matnr IMPORTING output fs_data-matnr.问题2日期格式不一致解决方案统一转换日期格式 DATA(lv_date) fs_data-posting_date. CALL FUNCTION CONVERT_DATE_TO_INTERNAL EXPORTING date_external lv_date IMPORTING date_internal fs_data-budat.问题3性能突然下降检查点数据库索引是否适当是否在循环中执行SELECT语句内存是否不足在企业级应用开发中Excel数据导入看似简单实则包含诸多技术细节。通过本文介绍的方法论和实践经验开发者可以构建出高效、稳定的数据导入解决方案满足不同业务场景的需求。

相关文章:

ABAP批量导入Excel数据实战:从文件选择到数据库插入的完整流程

ABAP高效Excel数据导入:从基础实现到性能优化的完整指南 在企业级SAP系统开发中,Excel数据批量导入是每个ABAP开发者必须掌握的技能。无论是期初数据加载、日常业务数据维护,还是系统间数据交换,高效可靠的数据导入机制都能显著提…...

AI投毒情报预警 | Xinference国产推理框架遭受供应链窃密后门投毒

风险概述 北京时间4月22日16点,悬镜AI安全情报中心在Pypi官方仓库中监测到国产热门开源AI模型推理框架 Xinference 短时间内连续发布2.6.0、2.6.1及2.6.2三个版本更新,并且在这三个新版本框架源码中都检出混淆代码及高风险恶意行为。在混淆恶意代码中发现…...

NHSE:动物森友会存档编辑工具全面指南

NHSE:动物森友会存档编辑工具全面指南 【免费下载链接】NHSE Animal Crossing: New Horizons save editor 项目地址: https://gitcode.com/gh_mirrors/nh/NHSE 你是否厌倦了在《集合啦!动物森友会》中反复刷资源、等待稀有村民出现?想…...

Cursor 官宣AI新玩具:Canvas

推荐阅读 IDEA 官宣:终于可以爽用Cursor了! 重磅!前端再次被碾压,比 Cursor 更强的 AI 工具发布了! Cursor 3.1 发布:VS Code 那一套要失效了吗? 💡 前言:以前和 A…...

安全编程实践常见漏洞与防范措施

在数字化时代,软件安全已成为开发过程中不可忽视的核心问题。安全编程实践旨在通过规范代码编写方式,预防潜在漏洞,降低被攻击风险。由于开发者的疏忽或知识盲区,常见漏洞如注入攻击、缓冲区溢出等仍频繁出现。本文将聚焦三类典型…...

从malloc到memsafe_c:2026规范强制要求的4类API替换清单,不改业务逻辑也能通过ISO/IEC 17961合规审计

第一章:现代 C 语言内存安全编码规范 2026 成本控制策略在嵌入式系统、操作系统内核与高性能服务开发中,C 语言仍占据不可替代地位,但传统内存操作(如裸指针算术、未校验的 malloc 返回值、strcpy 类危险函数)已成为安…...

Linux文件系统(一):从磁盘结构到文件系统基础

目录 一、计算机存储体系 1. 从计算机到磁盘 2. 什么是磁盘 二、磁盘的物理结构 1. 磁盘组成 2. 数据写入原理 三、磁盘的存储结构 1. 扇区、磁道、柱面 2. 磁盘与数组 单磁道展开 同半径磁道展开 全盘展开 C / C 数组思维的线性化 四、磁盘寻址方式 1. CHS 寻址…...

Elasticsearch分布式原理:集群数据分布机制与分片路由全流程深度剖析

Elasticsearch分布式原理:集群数据分布机制与分片路由全流程深度剖析前言一、核心前置:分布式数据依赖的三大基础组件1.1 主节点(Master Node)1.2 数据节点(Data Node)1.3 分片与副本(Shard &am…...

揭秘论文优化新利器:书匠策AI,让降重与去AIGC痕迹变得如此简单!

在学术的浩瀚宇宙中,每一篇论文都是探索者智慧与汗水的结晶。然而,当重复率成为横亘在发表之路上的巨石,当AIGC(人工智能生成内容)的痕迹让论文显得机械而缺乏灵魂,我们该如何破局?别怕&#xf…...

技术支持管理中的服务台建设

技术支持管理中的服务台建设:提升效率与用户体验的关键 在数字化转型的浪潮中,企业对技术支持的依赖日益加深。服务台作为技术支持管理的核心枢纽,不仅是问题解决的“第一窗口”,更是提升用户满意度和运维效率的关键环节。一个高…...

DeepL翻译浏览器扩展:让外语内容阅读变得轻松自然

DeepL翻译浏览器扩展:让外语内容阅读变得轻松自然 【免费下载链接】deepl-chrome-extension A DeepL Translator Chrome extension 项目地址: https://gitcode.com/gh_mirrors/de/deepl-chrome-extension 在当今全球化的信息环境中,我们每天都会接…...

Rspack简介

Rspack简介 前言:在前端构建领域,Webpack 长期占据主导地位,而 Vite 的出现打破了这一格局,两者各有优势,但也都存在明显短板:Webpack 生态成熟、兼容性强,但随着项目规模扩大,构建…...

解锁学术新次元:书匠策AI——期刊论文写作的“魔法宝盒”

在学术的浩瀚宇宙里,期刊论文就像是那璀璨的星辰,照亮着知识探索的道路。可对于许多人来说,撰写一篇高质量的期刊论文,就像是在迷雾中摸索前行,困难重重。不过别担心,今天我要给大家揭开一个神秘“魔法宝盒…...

3个步骤让经典游戏重获新生:IPXWrapper如何解决现代Windows的网络兼容难题?

3个步骤让经典游戏重获新生:IPXWrapper如何解决现代Windows的网络兼容难题? 【免费下载链接】ipxwrapper 项目地址: https://gitcode.com/gh_mirrors/ip/ipxwrapper 还记得那些年,和朋友们一起在《红色警戒2》的战场上厮杀&#xff0…...

别再瞎调权重了!手把手教你用Ceph CRUSH Map优化混合存储(SSD/HDD)性能

别再瞎调权重了!手把手教你用Ceph CRUSH Map优化混合存储(SSD/HDD)性能 当你的Ceph集群同时包含SSD和HDD时,是否经常遇到这样的困扰:高IOPS业务(如数据库)和冷数据归档业务混在一起,…...

QMK Toolbox 终极指南:3分钟掌握键盘固件烧录与调试完整流程

QMK Toolbox 终极指南:3分钟掌握键盘固件烧录与调试完整流程 【免费下载链接】qmk_toolbox A Toolbox companion for QMK Firmware 项目地址: https://gitcode.com/gh_mirrors/qm/qmk_toolbox 你是否曾经想过完全掌控自己的机械键盘?想让每一个按…...

告别龟速!手把手教你给Termux换清华源,pkg update飞起来

告别龟速!手把手教你给Termux换清华源,pkg update飞起来 每次在Termux里执行pkg update时,看着那缓慢的进度条一点点往前挪,是不是感觉时间仿佛被拉长了?作为Android上最强大的终端模拟器,Termux的官方源服…...

华为VRP网络运维:从零到精通的命令实战指南

1. 华为VRP平台入门:认识你的网络操作系统 第一次接触华为VRP(Versatile Routing Platform)时,我完全被满屏的命令行吓到了。但后来发现,这就像学开车要先熟悉方向盘和档位一样,掌握几个基础命令就能让设备…...

别再用错__attribute__了!C语言高手都在用的15个实战技巧(附代码避坑)

别再用错__attribute__了!C语言高手都在用的15个实战技巧(附代码避坑) 在嵌入式开发和系统级编程中,编译器扩展特性往往是区分普通开发者和高手的关键分水岭。GNU C的__attribute__机制就像瑞士军刀中的隐藏工具——90%的开发者只…...

抖音无水印下载终极指南:3分钟学会批量保存纯净视频

抖音无水印下载终极指南:3分钟学会批量保存纯净视频 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback support…...

Mujoco+强化学习入门实战教程

前言:本文是为了方便机器人初学者快速学习Mujoco强化学习而设计的教程,循序渐进,从环境搭建到简单的运动控制再到强化学习自主探索,难度逐步提升,帮助初学者建立学习路线,思维框架,并在此基础上…...

别再为小众物种发愁了!手把手教你用R包biomaRt和AnnotationForge定制专属OrgDb数据库

突破非模式生物分析瓶颈:从零构建定制化OrgDb数据库的实战指南 当你在深夜的实验室里盯着屏幕上那些无法匹配的基因ID时,是否曾感到一丝绝望?作为一名长期与山羊、绵羊等非模式生物打交道的生物信息学研究者,我完全理解这种挫败感…...

工业级YOLO检测数据处理:C#上位机存储+报表导出全方案(含SQLite+Excel+PDF+7×24小时稳定运行)

摘要 在工业视觉检测系统中,YOLO模型的推理性能只是基础,检测结果的可靠存储、规范管理与标准化报表导出才是决定系统能否真正落地的关键。很多项目只关注模型精度,却因数据处理方案简陋导致数据丢失、追溯困难、报表不规范等问题,最终无法通过企业验收。 本文基于C# Win…...

【WPF】巧用BitmapCacheOption.OnLoad释放图像文件句柄,解决资源锁定与程序崩溃难题

1. 为什么WPF会锁定图像文件? 在WPF开发中,很多开发者都遇到过这样的尴尬场景:程序加载了一张本地图片后,想要删除或修改这个图片文件时,系统却提示"文件正在被另一个程序使用"。这种情况通常发生在使用Bitm…...

Harness Engineering:AI Agent 落地企业的工程化核心

2025年是AI Agent的爆发元年,各类智能体工具层出不穷,但落地企业生产环境时却问题频发——越权操作、逻辑混乱、无法审计的情况屡见不鲜。2026年,Harness Engineering 成为行业破局关键,它让AI Agent从「实验室玩具」变成「企业级…...

别再傻傻分不清了!一张图看懂PLM、ERP、MES、CRM在工厂里到底怎么分工协作

制造业四大核心系统协同作战指南:PLM、ERP、MES、CRM如何打通产品全生命周期 走进任何一家现代化制造企业的信息化部门,你都会听到PLM、ERP、MES、CRM这些英文缩写被频繁提及。对于初次接触这些系统的IT人员或业务管理者来说,最困惑的往往不是…...

2026年最火的工程范式:Harness Engineering指南与应用

Harness Engineering - 自主智能体系统工程范式(Autonomous Agent System Engineering Paradigm)引言2026年,随着AI智能体系统复杂度突破临界点,传统DevOps与MLOps已无法满足多智能体协同开发需求。Harness Engineering应运而生&a…...

from和inpu的用法介绍(Mac实操版)

Mac版写HTML与Windows版不同,但思路不变。首先,创建HTML文件, 通过快捷键commandspace 搜索“文本编辑”App。接下来,点击新建文稿将文稿重命名,改为html后缀结尾,如下图所示通过选择VScode的打开方式&…...

抖音下载器终极实战指南:高效批量下载无水印视频与直播回放

抖音下载器终极实战指南:高效批量下载无水印视频与直播回放 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback …...

【AI智能体】Claude Code 集成Github CLI 实现高效项目协同使用详解

目录 一、前言 二、Github CLI 介绍 2.1 什么是 GitHub CLI 2.2 GitHub CLI 日常使用场景 2.3 GitHub CLI 优缺点 2.3.1 GitHub CLI 使用优点 2.3.2 GitHub CLI 使用缺点 2.4 GitHub CLI 常用命令汇总 2.4.1 核心命令 2.4.2 GitHub Actions 命令 2.4.3 认证与配置命令…...