HarmonyOS鸿蒙Next中软件用户的某些重要数据需要自主导出为excel, pdf的文件,存储于本地或其它第三方媒介,数据展示形式包括表格。支持了么?

HarmonyOS鸿蒙Next中软件用户的某些重要数据需要自主导出为excel, pdf的文件,存储于本地或其它第三方媒介,数据展示形式包括表格。支持了么? 【问题描述】:软件用户的某些重要数据需要自主导出为excel, pdf的文件,存储于本地或其它第三方媒介,数据展示形式包括表格。支持了么?

【问题现象】:软件用户的某些重要数据需要自主导出为excel, pdf的文件,存储于本地或其它第三方媒介,数据展示形式包括表格。支持了么?

【功能场景】:软件用户的某些重要数据需要自主导出为excel, pdf的文件,存储于本地或其它第三方媒介,数据展示形式包括表格。

【缺少带来的影响】:目前pdf kit服务只能写入文本,图片和标注,无法灵活插入表格形式的内容。其它方式也不能方便且灵活定义表格样式并快速写入数据,影响软件功能完整性。

【版本信息】:不涉及

【复现代码】:不涉及

【尝试解决方案】:暂无


更多关于HarmonyOS鸿蒙Next中软件用户的某些重要数据需要自主导出为excel, pdf的文件,存储于本地或其它第三方媒介,数据展示形式包括表格。支持了么?的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

开发者您好,数据导出excel可以参考如下案例:

  1. 构造Excel表格对应的CSV文件数据。

  2. 使用fs.write将数据写入Excel文件。

  3. 使用DocumentViewPicker将文件保存到用户文件目录下。

示例代码如下:

// ExcelDemo.ets
import fs from '@ohos.file.fs';
import { picker } from '@kit.CoreFileKit';
import { BusinessError } from '@kit.BasicServicesKit';
import { hilog } from '@kit.PerformanceAnalysisKit';

const DOMAIN = 0x0000;

interface Product {
  name: string;
  price: number;
  quantity: number;
}

let products: Product[] = [
  { name: 'Prod,uct1', price: 10.0, quantity: 5 },
  { name: 'Pr"oduc"t2', price: 15.0, quantity: 3 }
];

@Entry
@Component
struct ExcelDemo {
  convertToCSV(data: Product[]): string {
    let headers = ["名称", "价格", "数量"];
    let fields = ["name", "price", "quantity"];
    let csvContent = headers.join("\t") + "\n";
    data.forEach((product) => {
      let rowData = fields.map(field => {
        let value: string = Object(product)[field].toString() || ''; // 获取字段值
        // 移除换行符
        value = value.toString().replace(/[\n\r]/g, ' ');
        // 如果值中包含逗号、引号,则用双引号包裹,并且转义双引号
        if (typeof value === 'string' && (value.includes(',') || value.includes('"'))) {
          let temp = value.replace(/"/g, '""');
          value = `"${temp}"`;
        }
        return value;
      });
      csvContent += rowData.join("\t") + "\n";
    });
    return csvContent;
  }

  build() {
    RelativeContainer() {
      Button('write excel').onClick(() => {
        // 定义文件路径,这里假设要保存到应用的内部存储某个目录下,可根据实际需求调整。
        try {
          let uris: Array<string> = [];
          // 创建文件管理器选项实例
          const documentSaveOptions = new picker.DocumentSaveOptions();
          documentSaveOptions.newFileNames = ["Test20.xlsx"];
          documentSaveOptions.fileSuffixChoices = ['文档|.xlsx', '.xlsx'];
          const documentViewPicker = new picker.DocumentViewPicker(getContext(this));
          // 用户选择目标文件夹,用户选择与文件类型相对应的文件夹,即可完成文件保存操作。保存成功后,返回保存文档的URI。
          documentViewPicker.save(documentSaveOptions).then((documentSaveResult: Array<string>) => {
            uris = documentSaveResult;
            let file = fs.openSync(uris[0], fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
            // 构建CSV数据
            let csvData = this.convertToCSV(products);
            fs.write(file.fd, csvData).then((writeLen: number) => {
              hilog.info(DOMAIN, 'testTag', 'write data to file succeed and size is:', writeLen);
            }).catch((err: BusinessError) => {
              hilog.error(DOMAIN, 'testTag',
                "write data to file failed with error message: ", err.message, ", error code: ", err.code);
            }).finally(() => {
              fs.closeSync(file);
            });

            hilog.info(DOMAIN, 'testTag', 'documentViewPicker.save to file succeed and uris are:', uris);
          }).catch((err: BusinessError) => {
            hilog.error(DOMAIN, 'testTag',
              `Invoke documentViewPicker.save failed, code is ${err.code}, message is ${err.message}`);
          })
        } catch (e) {
          hilog.error(DOMAIN, 'testTag', "documentViewPicker.save error: ", JSON.stringify(e));
        }
      })
    }
    .height('100%')
    .width('100%')
  }
}

对于数据以表格形式插入pdf问题:尊敬的开发者,您好!该功能正在评估中,感谢您的理解与支持。

更多关于HarmonyOS鸿蒙Next中软件用户的某些重要数据需要自主导出为excel, pdf的文件,存储于本地或其它第三方媒介,数据展示形式包括表格。支持了么?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


HarmonyOS Next支持将数据导出为Excel和PDF文件。开发者可通过ArkTS调用系统文件管理接口,使用第三方库如XLSX.js生成Excel,或通过Canvas绘制PDF。数据表格展示需自行实现UI组件或使用现有组件库。文件可存储于设备本地或通过系统分享接口保存至第三方应用。具体实现需查阅HarmonyOS官方文档中文件管理和数据导出相关API。

是的,HarmonyOS Next 完全支持将应用数据导出为 Excel 和 PDF 格式的表格文件,并存储于本地或分享至第三方应用。

1. 导出为 Excel 表格 您可以使用 @ohos.file.picker(文件选择器)和 @ohos.file.fs(文件管理)等接口,将数据生成为 .xlsx.csv 文件。

  • 核心流程:应用内部将数据按 Office Open XML 格式(用于 .xlsx)或逗号分隔值格式(用于 .csv)组织成二进制数据或文本,然后通过文件系统 API 写入用户通过文件选择器指定的路径。
  • 关键能力:文件选择器允许用户自主选择保存到设备本地存储或挂载的第三方云盘目录,实现了“存储于其它第三方媒介”的需求。

2. 导出为 PDF 表格 对于 PDF 导出,虽然基础的 @ohos.print 打印框架和 PDF Kit 的标注功能不直接提供高级表格绘制 API,但您可以通过以下两种标准方式实现:

  • 使用 Canvas 绘制:通过 @ohos.graphics.canvas 的 CanvasRenderingContext2D API,可以精确绘制线条、文本,从而编程生成任意样式的表格,再将 Canvas 内容输出为图片,嵌入到通过 @ohos.print 生成的 PDF 页面中。这种方式提供了最大的灵活性来“灵活定义表格样式”。
  • 生成 HTML 并转换:将数据渲染为包含表格的 HTML 字符串,然后使用 Web 组件的 snapshot 方法将 HTML 内容捕获为图片,最后将此图片插入 PDF。这种方法对于已有 Web 前端表格样式代码的复用较为方便。

总结 HarmonyOS Next 提供了完备的文件系统访问、用户文件路径选择、2D 图形绘制和文档打印/生成能力。导出 Excel 文件是直接支持的导出带表格的 PDF 则需要开发者利用 Canvas 或 Web 组件进行表格内容的绘制与合成,系统的基础能力为此提供了必要的支撑。您可以根据所需的表格复杂度和样式灵活性,选择上述路径进行实现。

回到顶部