SheetJS の一般的なスプレッドシート オブジェクトの紹介と使用法

簡単に言うと

「Common Spreadsheet Format」(CSF) は、SheetJS で使用されるオブジェクト モデルです。
たとえば、xlsx プラグインを使用する場合、取得される Excel ファイル データ オブジェクトはこのモデルに従って設計されます。
SheetJs 汎用スプレッドシート オブジェクト

ここに画像の説明を挿入

導入

cdnインポート:

  <script lang="javascript" src="https://cdn.sheetjs.com/xlsx-0.19.2/package/dist/xlsx.full.min.js"></script>

オブジェクトモデル

まず、汎用スプレッドシート オブジェクト モデル全体を見てみましょう。
ここに画像の説明を挿入

  • workbook (workbook オブジェクト): workbook オブジェクトは、変換によって読み取られるファイル オブジェクトです。これには、ファイル オブジェクトの関連属性と、保存されたワークシート データ情報が含まれます。
  • シート (ワークシート オブジェクト) : シートは通常の JavaScript オブジェクトです。! で始まらない各キーは A1 形式のアドレスであり、それに対応する値はセル オブジェクトです。(A1 スタイルは、列がアルファベット順、行が番号順の 2 次元テーブルを表します)
  • cell (セル オブジェクト) : ワークシート内で、A1 スタイルで始まる属性はセル オブジェクトであり、一連の定義された属性を使用して関連データ情報を格納します。
  • アドレスと範囲: アドレスはワークシート内のセル オブジェクトの位置を表し、範囲はワークシート内の結合された情報を表します。

アドレスと範囲

住所

ユニット アドレス オブジェクトは {c:C, r:R} として保存されます。ここで、C と R はそれぞれ 0 インデックスの列番号 (col) と行番号 (row) で、js インデックスはデフォルトで 0 から始まりますたとえば、セル アドレス B5 はオブジェクト {c:1, r:4} で表され、A1 は {c:0, r:0} で表されます。

範囲

セル範囲オブジェクトは {s:S, e:E} として保存されます。ここで、S は範囲内の最初のセル、E は範囲内の最後のセルです範囲を含む、閉じた間隔。たとえば、範囲 A3:B7 はオブジェクト {s:{c:0, r:2}, e:{c:1, r:6}} によって表されます。

列範囲 (各行にまたがる) は、開始行 0 と終了行 1048575 で表されます。

{
    
     s: {
    
     c: 0, r: 0 }, e: {
    
     c: 0, r: 1048575 } } // A:A
{
    
     s: {
    
     c: 1, r: 0 }, e: {
    
     c: 2, r: 1048575 } } // B:C

行範囲 (各列にまたがる) は、開始列 0 と終了列 16383 で表されます。

{
    
     s: {
    
     c: 0, r: 0 }, e: {
    
     c: 16383, r: 0 } } // 1:1
{
    
     s: {
    
     c: 0, r: 1 }, e: {
    
     c: 16383, r: 2 } } // 2:3

関連インターフェース

XLSX.utils オブジェクトは、セルのアドレスと範囲に関するいくつかの関数を提供します。

  • encode_row/decode_row は、0 インデックスの行と 1 インデックスの行の間で変換します。
  • encode_col/decode_col は、0 から始まるインデックスの列と列名の間で変換します。
  • encode_cell / decode_cell セルアドレスを変換します。
  • encode_range / decode_range はセル範囲を変換します。
    例:
    // 在0索引行和1索引行之间转换
    let row_index = XLSX.utils.decode_row("4");
    let row_name = XLSX.utils.encode_row(3);
    console.log(row_index, row_name);
    //  列转换
    let col_index = XLSX.utils.decode_col("D");
    let col_name = XLSX.utils.encode_col(3);
    console.log(col_index, col_name);
    //  单元格地址转换
    let b2_addr = XLSX.utils.encode_cell({
    
     c: 1, r: 1 })
    let b2_obj = XLSX.utils.decode_cell("B2")
    console.log(b2_addr, b2_obj);

    //  单元格范围转换
    let a1_range = XLSX.utils.encode_range({
    
     s: {
    
     c: 0, r: 0 }, e: {
    
     c: 3, r: 2 } });
    let a1_obj = XLSX.utils.decode_range("A1:E5")
    console.log(a1_range, a1_obj);

データをカスタマイズしたい場合は、セルの結合情報を処理するときに使用できます。

セルオブジェクト

Cell オブジェクトは通常の JS オブジェクトであり、次の形式で定義されます。

属性 説明する
v セルの値 (数値、文字列、日付オブジェクト、ブール値)
t 値の型: (b: ブール値、s: 文字列、n: 数値、d: 日付、e: エラー、z: スタブ)
デジタル相関
z セルに関連付けられた数値書式文字列
w 数値形式のテキスト
数式関連
f A1 スタイルの文字列としてエンコードされたセル数式 (該当する場合)
F 数式が配列数式の場合、それを囲む配列の範囲 (該当する場合)
D true の場合、配列数式は動的になります (該当する場合)。
その他のセルのプロパティ
セルのハイパーリンクとツールチップ
c セルコメント
r リッチ テキスト エンコーディング (該当する場合)
h リッチ テキストの HTML レンダリング (該当する場合)
s セルのスタイル/テーマ (該当する場合)

シートオブジェクト

シートはプレーンな JavaScript オブジェクトです。! で始まらない各キーは A1 形式のアドレスであり、それに対応する値はセル オブジェクトです。

ワークシート内のデータ情報

一般に、sheet[address] は、指定されたアドレスにあるセル オブジェクトを返します。
ファイルを解析するときに、オプションにdensity: true が指定されている場合、データはdenseモードで表示され、データ形式はsheet[“! data”][R][C]で、セルは配列に格納されます。配列の。table![R][C] は、行 R と列 C のセル オブジェクト (インデックスがゼロの値) を返します。
公式 Web サイトには、ワークシート データを印刷するための標準コードが記載されています。これを以下に貼り付けます。

 const {
    
     decode_range, encode_cell } = XLSX.utils;

    function log_all_cells(ws) {
    
    
      let range = decode_range(ws["!ref"]);
      let dense = ws["!data"] != null; // test if sheet is dense
      for (let R = 0; R <= range.e.r; ++R) {
    
    
        for (let C = 0; C <= range.e.c; ++C) {
    
    
          let cell = dense ? ws["!data"]?.[R]?.[C] : ws[encode_cell({
    
     r: R, c: C })];
          console.log(R, C, cell);
        }
      }
    }

log_all_cells (ws) のパラメータはワークシート オブジェクトです。オブジェクトを取得する場合は、まずワークブック オブジェクトからワークシート名を取得し、動的に object プロパティを呼び出してワークシート オブジェクトを取得する必要があります。

ワークシート内のその他のプロパティ

各キーは ! で始まります。プロパティはsheet[key]としてアクセスできます。

  • Sheet['!ref'] : A-1 に基づく範囲。シート範囲を示します。ワークシートを処理する関数は、このパラメータを使用して範囲を決定する必要があります。範囲外に割り当てられたセルは処理されません。特に紙に手書きする場合は範囲​​外のセルは含まれないため、
    フォームを処理する関数では!refフィールドの有無をテストする必要があります。!ref が省略されているか、有効な範囲ではない場合、関数は自由にシートを空として扱うか、範囲の推測を試みます。このライブラリに含まれる標準ユーティリティは、シートを空として扱います (たとえば、CSV 出力は空の文字列として扱われます)。
    SheetRows プロパティが設定されたシートを読み取る場合、ref パラメーターは制限された範囲を使用します。元のスコープは ws['!fullref'] に設定されます

  • Sheet['!margins'] : ページの余白を表すオブジェクト。デフォルトは Excel の「全般」プリセットに従います。Excel には「広い」および「狭い」プリセットもありますが、それらは生の測定値として保存されます。

  • ws['!cols']: 列属性オブジェクトの配列。列幅は実際には、「最大数値幅」(ピクセル単位で表示される 0 ~ 9 の数値の最大幅) に対して測定された正規化された方法でファイルに格納されます。解析時に、列オブジェクトはピクセル幅を wpx フィールドに、文字幅を wch フィールドに、最大数値幅を MDW フィールドに格納します。

  • ws['!rows'] : ドキュメントで後述するように、行属性オブジェクトの配列。各行オブジェクトは、行の高さや可視性などのプロパティをエンコードします。

  • ws['!merges'] : ワークシート内の結合されたセルに対応する範囲オブジェクトの配列。プレーン テキスト形式は結合されたセルをサポートしません。CSV エクスポートでは、結合された範囲 (存在する場合) 内のすべてのセルに書き込まれるため、範囲内の最初のセル (左上) のみを設定するようにしてください。

  • ws['!outline'] : アウトラインの動作を構成します。オプションのデフォルトは Excel 2019 のデフォルト設定になります。

  • ws['!protect'] : ワークシートの保護プロパティを書き込むオブジェクト。パスワード キーは、パスワードで保護されたワークシート (XLSX/XLSB/XLS) をサポートする形式のパスワードを指定します。

  • ws['!auto​​filter'] : パターンの後のオートフィルター オブジェクト。

  • ws['!type']: ワークシートの種類を示します。「chart」はチャート ワークシート、「macro」はマクロ ワークシート、「dialog」はダイアログ ワークシートです。

関連インターフェース

XLSX.utils オブジェクトの下:

  • aoa_to_sheet は、JS データ配列をワークシートに変換します。
  • json_to_sheet は、JS オブジェクトの配列をシートに変換します。
  • table_to_sheet は、 DOM テーブル要素をシートに変換します。
  • Sheet_add_aoa は、JS データの配列を既存のシートに追加します。
  • Sheet_add_json は、JS オブジェクトの配列を既存のシートに追加します。
  • Sheet_add_dom は、 DOM テーブル要素から既存のシートにデータを追加します。
  • Sheet_to_json は、シート オブジェクトを JSON オブジェクトの配列に変換します。
  • Sheet_to_csv は、区切り文字で区切られた値の出力を生成します。
  • Sheet_to_txt は、UTF16 形式でテキストを生成します。
  • Sheet_to_html は HTML 出力を生成します。
  • Sheet_to_formulae は、数式のリストを生成します (値のフォールバックあり)。

ワークシートがファイルの本体であるため、ワークシートにはさらに多くのメソッドがあります。ワークシートのカスタマイズやワークシート情報の加工をご希望の場合は、公式Webサイトをご覧ください。

ワークブックオブジェクト

ワークブックは Excel ファイルのオブジェクト記述です。これらのプロパティのいくつかを以下に説明します。

  • workbook.SheetNames :ワークシート名を保存する、ワークブック内のワークシートの順序付きリスト。
  • wb.Sheets [シート名] : ワークシート オブジェクトを返します。
  • wb.Props: 標準プロパティを格納するオブジェクトです。
  • wb.Custprops: カスタム プロパティを保存します。
  • wb.Workbook: ワークブックレベルのプロパティを保存します。

関連インターフェース

  • book_new は空のワークブックを作成します
  • book_append_sheet はワークシートをワークブックに追加します

さらに、ファイル解析関数では、ファイル読み取り関数はワークブック オブジェクトを返し、ファイル エクスポート関数の最初のパラメーターはワークブック オブジェクトです。たとえば、
XLSX.read(data, read_opts) はデータを解析してワークブックを返そうとし、
XLSX.writeXLSX(wb, write_opts) はワークブックを XLSX 形式で書き込もうとします。

例:

// 创建工作簿
    const wb = new XLSX.utils.book_new()
    //  json数据转成工作表对象
    let ws = XLSX.utils.json_to_sheet([
      {
    
     A: "S1", B: "h1", C: "e1", D: "e1", E: "t1", F: "J1", G: "S1" },
      {
    
     A: "S2", B: "h2", C: "e2", D: "e2", E: "t2", F: "J2", G: "S2" }

    ], {
    
     header: ["A", "B", "C", "D", "E", "F", "G"], skipHeader: true });
    //  更新对应地址的值,不存在添加,存在替换
    XLSX.utils.sheet_add_json(ws, [
      {
    
     A: 1, B: 2 }, {
    
     A: 2, B: 3 }, {
    
     A: 3, B: 4 }
    ], {
    
     skipHeader: true, origin: "A2" });

    //  将工作表对象追加到工作簿中
    XLSX.utils.book_append_sheet(wb, ws, '数据表1')
    XLSX.utils.book_append_sheet(wb, ws, '数据表2')

    console.log(wb);
    //  导出
    XLSX.writeFile(wb, '新的excel.xlsx')

エピローグ

終わりました。

おすすめ

転載: blog.csdn.net/qq_43231248/article/details/129059901