OLE EXCEL 中添加图片,link server示例

REPORT  ZFENGLEIHEN_TEST.

TYPE-POOLS: SBDST, ABAP.
INCLUDE OLE2INCL.
DATA: GRAPHIC_URL(255).
DATA: BEGIN OF ITAB  OCCURS 0,
         RAW TYPE SDOK_SDATX,
      END OF ITAB.
* OLE OBJECT
DATA: MYEXCEL    TYPE OLE2_OBJECT,
      MYSHEET    TYPE OLE2_OBJECT,
      MYCELL     TYPE OLE2_OBJECT,
      MYWORKBOOK TYPE OLE2_OBJECT,
      LO_SHEET   TYPE OLE2_OBJECT,
      LO_RANGE1   TYPE OLE2_OBJECT,
      LO_RANGE3   TYPE OLE2_OBJECT,
      LO_RANGE2   TYPE OLE2_OBJECT.

PERFORM. GET_URL.
CREATE OBJECT MYEXCEL 'EXCEL.APPLICATION'.
SET PROPERTY OF MYEXCEL 'DisplayAlerts' = 0.
CALL METHOD OF MYEXCEL 'WORKBOOKS' = MYWORKBOOK.
SET PROPERTY OF MYEXCEL 'VISIBLE' = 1.
SET PROPERTY OF MYEXCEL 'SHEETSINNEWWORKBOOK' = 1.
CALL METHOD OF MYWORKBOOK 'ADD'.


CALL METHOD OF MYEXCEL 'WORKSHEETS' = LO_SHEET
  EXPORTING #1 = 1.
CALL METHOD OF LO_SHEET 'ACTIVATE'.
SET PROPERTY OF LO_SHEET 'NAME' = 'TEXT1'.
*  'THIS IS MY CREATED EXCEL'.

CALL METHOD OF LO_SHEET 'CELLS' = LO_RANGE2
  EXPORTING
  #1 = 7
  #2 = 7.
CALL METHOD OF LO_RANGE2 'SELECT'.
CALL METHOD OF LO_SHEET 'Paste'.

FREE OBJECT LO_SHEET.
*&---------------------------------------------------------------------*
*&      Form.  get_url
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM. GET_URL.


* OAOR 上传图片 并把change Attributes中的KEYWORDS设置成FENGLEIHEN_LOGO
  DATA: SIGNATURE  TYPE SBDST_SIGNATURE   WITH HEADER LINE,
        URIS       TYPE SBDST_URI         WITH HEADER LINE.

  MOVE: '1' TO SIGNATURE-DOC_COUNT,
        '1' TO SIGNATURE-COMP_COUNT.
  MOVE: 'BDS_KEYWORD' TO SIGNATURE-PROP_NAME,
        'FENGLEIHEN_LOGO' TO SIGNATURE-PROP_VALUE.
  APPEND SIGNATURE.
  CALL METHOD CL_BDS_DOCUMENT_SET=>GET_WITH_URL
    EXPORTING
      CLASSNAME    = 'PICTURES'
      CLASSTYPE    = 'OT'
      URL_LIFETIME = 'T'
    CHANGING
      URIS         = URIS[]
      SIGNATURE    = SIGNATURE[].
  READ TABLE URIS INDEX 1 .
  IF SY-SUBRC = 0 .
    GRAPHIC_URL = URIS-URI .
  ENDIF .
  PERFORM. GET_PIC.

ENDFORM.                    "get_url
*&---------------------------------------------------------------------*
*&      Form.  get_pic
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM. GET_PIC.

  DATA: LINK_SERVER TYPE REF TO I_OI_LINK_SERVER,
        CONTROL TYPE REF TO I_OI_CONTAINER_CONTROL,
        RET TYPE SOI_RET_STRING.
  CALL METHOD C_OI_CONTAINER_CONTROL_CREATOR=>GET_CONTAINER_CONTROL
    IMPORTING
      CONTROL = CONTROL
      RETCODE = RET.

  CALL METHOD CONTROL->INIT_CONTROL
    EXPORTING
      R3_APPLICATION_NAME     = 'EXCEL.APPLICATION'
      INPLACE_ENABLED         = ''
      PARENT                  = CL_GUI_CONTAINER=>SCREEN0
      REGISTER_ON_CLOSE_EVENT = 'X'
    IMPORTING
      RETCODE                 = RET.

* Link Server mit Control Verbinden
  CALL METHOD CONTROL->GET_LINK_SERVER
    IMPORTING
      LINK_SERVER = LINK_SERVER
      RETCODE     = RET.

* Link Server starten
  CALL METHOD LINK_SERVER->START_LINK_SERVER
    EXPORTING
      LINK_SERVER_MODE   = LINK_SERVER->LINK_SERVER_CUSTOMNAME
      SERVER_NAME_SUFFIX = 'FENGLEIHEN_SAP_LOGO'
    IMPORTING
      RETCODE            = RET.
  CALL METHOD LINK_SERVER->ADD_BINARY_ITEM
    EXPORTING
      DATA_TYPE    = 'image/gif'
      ITEM_NAME    = 'fengleihen'
      TABLE_URL    =  GRAPHIC_URL
      .
  CALL METHOD LINK_SERVER->COPY_LINK_ITEM_TO_CLIPBOARD
    EXPORTING
      ITEM_NAME = 'fengleihen'
      .
  CALL METHOD LINK_SERVER->REMOVE_LINK_ITEM
    EXPORTING
      ITEM_NAME = 'fengleihen'
    .

ENDFORM.                    "get_pic

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/139677/viewspace-604084/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/139677/viewspace-604084/

在 ASP.NET 项目中实现 Excel 文件的在线预览功能,通常有几种不同的技术路径可以选择。以下是一些可行的方案,并结合 C# 编程语言进行实现。 ### 使用 Aspose.Cells 实现 Excel 预览 Aspose.Cells 是一个功能强大的第三方库,支持将 Excel 文件直接转换为 HTML 或 PDF 格式,从而实现在 Web 页面中的预览效果。使用该库可以避免对 Microsoft Office 的依赖,并且能够处理复杂的 Excel 文件内容,包括公式、图表、样式等。 以下是一个简单的代码示例,展示如何使用 Aspose.Cells 将 Excel 文件转换为 HTML 并返回给前端: ```csharp using Aspose.Cells; public ActionResult PreviewExcel(string filePath) { Workbook workbook = new Workbook(filePath); workbook.Save(Server.MapPath("~/Preview.html"), SaveFormat.Html); return Redirect("/Preview.html"); } ``` 此方法适合需要保留原始 Excel 格式和结构的场景[^1]。 --- ### 后台读取 Excel 数据并返回给前端渲染 另一种常见做法是通过 ADO.NET 或 EPPlus 等库读取 Excel 数据,将其转换为 JSON 格式并返回给前端,然后使用 JavaScript 表格插件(如 Handsontable)进行渲染。 例如,使用 `OleDbConnection` 从 Excel 中读取数据并返回 JSON: ```csharp public JsonResult GetExcelData(string path) { string connString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties='Excel 12.0;HDR=YES;'"; using (OleDbConnection conn = new OleDbConnection(connString)) { conn.Open(); OleDbCommand cmd = new OleDbCommand("SELECT * FROM [Sheet1$]", conn); OleDbDataAdapter adapter = new OleDbDataAdapter(cmd); DataTable dt = new DataTable(); adapter.Fill(dt); return Json(DataTableToJSON(dt), JsonRequestBehavior.AllowGet); } } private object DataTableToJSON(DataTable table) { var list = new List<Dictionary<string, object>>(); foreach (DataRow row in table.Rows) { var dict = new Dictionary<string, object>(); foreach (DataColumn column in table.Columns) { dict[column.ColumnName] = row[column]; } list.Add(dict); } return list; } ``` 前端可使用 Handsontable 进行渲染: ```html <div id="example"></div> <script src="https://cdn.jsdelivr.net/npm/handsontable/dist/handsontable.full.min.js"></script> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/handsontable/dist/handsontable.full.min.css"> <script> fetch('/Home/GetExcelData') .then(response => response.json()) .then(data => { const container = document.getElementById('example'); const hot = new Handsontable(container, { data: data, colHeaders: Object.keys(data[0]), columns: Object.keys(data[0]).map(() => ({ type: 'text' })), rowHeaders: true, licenseKey: 'non-commercial-and-evaluation' }); }); </script> ``` 这种方式适用于数据量较小且不需要复杂格式保留的场景[^2]。 --- ### 部署 Office Online Server 实现在线预览 如果企业环境中已有 Microsoft Office 套件,并希望实现完整的 Excel 在线编辑与预览功能,可以部署 Office Online Server(OOS)。通过 OOS 可以在浏览器中直接打开 `.xlsx` 文件,提供接近桌面版 Excel 的体验。 实现方式如下: - 安装并配置 Office Online Server。 - 在 ASP.NET 应用中嵌入 Office Web Viewer 控件: ```html <iframe src="https://your-oos-server/op/embed.aspx?src=https://yourdomain.com/files/sample.xlsx" style="width:100%; height:600px;" frameborder="0"></iframe> ``` 这种方式适合企业级应用,具备良好的兼容性和用户体验[^1]。 --- ### 使用在线服务实现 Excel 预览 还可以利用 Google Docs 或 Microsoft Office Online 提供的嵌入式预览功能,将 Excel 文件上传至公共服务器后通过 iframe 嵌入到网页中。 示例代码如下: ```html <iframe src="https://docs.google.com/gview?url=https%3A%2F%2Fyourdomain.com%2Ffiles%2Fsample.xlsx&embedded=true" style="width:100%; height:600px;" frameborder="0"></iframe> ``` 该方法无需本地开发,但存在隐私和安全风险,不建议用于敏感数据的展示[^1]。 --- ### 总结 根据具体需求选择合适的实现方式: - 如果需要保留完整样式和格式,推荐使用 **Aspose.Cells**。 - 如果仅需展示数据内容,可使用 **后台读取数据 + 前端表格插件**。 - 对于企业级部署,建议采用 **Office Online Server**。 - 快速原型或非敏感数据可考虑 **Google Docs 或 Microsoft Office Online 嵌入**。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值