1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

JspreadsheetAdvent Calendar 2024

Day 11

ChatGPT先生にJspreadsheetを教えてもらう

Posted at

はじめに

この記事はJspreadsheet Advent Calendar 2024の11日目の記事です。

Jspreadsheetを今知ったところですが、
とても便利そうなので、ChatGPT先生と一緒に試してみます。

ChatGPT先生に教えてもらう

スクリーンショット 2024-12-17 22.05.33.png
スクリーンショット 2024-12-17 22.05.47.png

なるほど、なるほど。便利そう。
JSON、CSVのあたりが気になる。

サンプルを作ってもらう

スクリーンショット 2024-12-17 22.06.00.png

j1.html
<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>APIデータをJspreadsheetに表示</title>
  <!-- Jspreadsheet CSS -->
  <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/jspreadsheet-ce/dist/jspreadsheet.css" />
  <script src="https://cdn.jsdelivr.net/npm/jspreadsheet-ce/dist/jspreadsheet.js"></script>
  <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script> <!-- Axios (API用) -->
</head>
<body>
  <h1>APIデータを取得して表示</h1>
  <!-- スプレッドシートを表示する場所 -->
  <div id="spreadsheet"></div>

  <script>
    // JSONPlaceholder APIからデータを取得
    async function fetchData() {
      try {
        // ユーザーデータを取得
        const response = await axios.get('https://jsonplaceholder.typicode.com/users');
        const users = response.data;

        // データをスプレッドシート用に整形
        const data = users.map(user => [
          user.id,
          user.name,
          user.username,
          user.email,
          user.address.city
        ]);

        // Jspreadsheetを作成
        jspreadsheet(document.getElementById('spreadsheet'), {
          data: data,
          columns: [
            { type: 'number', title: 'ID', width: 50 },
            { type: 'text', title: 'Name', width: 150 },
            { type: 'text', title: 'Username', width: 100 },
            { type: 'text', title: 'Email', width: 200 },
            { type: 'text', title: 'City', width: 120 }
          ],
          pagination: 5, // ページごとに表示する行数
          search: true   // 検索機能を有効化
        });
      } catch (error) {
        console.error('データの取得に失敗しました', error);
      }
    }

    // データ取得を実行
    fetchData();
  </script>
</body>
</html>

スクリーンショット 2024-12-18 7.26.28.png

スクリーンショット 2024-12-18 7.26.58.png

あ。そうだ、CSVで保存するボタンを付けてもらおう。

スクリーンショット 2024-12-18 7.28.05.png

スクリーンショット 2024-12-18 7.28.34.png

j1.html
<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>APIデータをJspreadsheetに表示 & CSV保存</title>
  <!-- Jspreadsheet CSS -->
  <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/jspreadsheet-ce/dist/jspreadsheet.css" />
  <script src="https://cdn.jsdelivr.net/npm/jspreadsheet-ce/dist/jspreadsheet.js"></script>
  <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script> <!-- Axios (API用) -->
</head>
<body>
  <h1>APIデータを取得して表示</h1>
  <!-- CSV保存ボタン -->
  <button id="saveCsvBtn">CSVで保存</button>

  <!-- スプレッドシートを表示する場所 -->
  <div id="spreadsheet"></div>

  <script>
    let spreadsheetInstance;

    // JSONPlaceholder APIからデータを取得
    async function fetchData() {
      try {
        const response = await axios.get('https://jsonplaceholder.typicode.com/users');
        const users = response.data;

        // データをスプレッドシート用に整形
        const data = users.map(user => [
          user.id,
          user.name,
          user.username,
          user.email,
          user.address.city
        ]);

        // Jspreadsheetを作成
        spreadsheetInstance = jspreadsheet(document.getElementById('spreadsheet'), {
          data: data,
          columns: [
            { type: 'number', title: 'ID', width: 50 },
            { type: 'text', title: 'Name', width: 150 },
            { type: 'text', title: 'Username', width: 100 },
            { type: 'text', title: 'Email', width: 200 },
            { type: 'text', title: 'City', width: 120 }
          ],
          pagination: 5, // ページごとに表示する行数
          search: true   // 検索機能を有効化
        });
      } catch (error) {
        console.error('データの取得に失敗しました', error);
      }
    }

    // CSV保存ボタンの動作
    document.getElementById('saveCsvBtn').addEventListener('click', () => {
      // JspreadsheetのデータをCSVとしてエクスポート
      spreadsheetInstance.download({ 
        filename: 'spreadsheet-data.csv', 
        delimiter: ',' 
      });
    });

    // データ取得を実行
    fetchData();
  </script>
</body>
</html>

スクリーンショット 2024-12-18 7.30.21.png
スクリーンショット 2024-12-18 7.30.56.png
スクリーンショット 2024-12-18 7.31.40.png

いざブラウザで開く

スクリーンショット 2024-12-18 7.34.05.png

あれれ?表が表示されない。

元データはこれなのに何も表示されない。
https://jsonplaceholder.typicode.com/users

Chromeの開発者ツールで確認。

スクリーンショット 2024-12-18 7.36.09.png

Jspreadsheet自体の読み込みに失敗している様子。
ChatGPTとの対話で、しばし格闘したが改善せず。

1日目の記事を見に行く。

CDNのところに記載されている通りにやれば良さそう。

スクリーンショット 2024-12-18 7.42.04.png

スクリーンショット 2024-12-18 7.42.45.png

j2.html
<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>APIデータをJspreadsheetに表示</title>
  
  <!-- CSSライブラリ -->
  <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/jspreadsheet-ce/dist/jspreadsheet.min.css" type="text/css" />
  <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/jsuites/dist/jsuites.min.css" type="text/css" />
  
  <!-- JavaScriptライブラリ -->
  <script src="https://cdn.jsdelivr.net/npm/jspreadsheet-ce/dist/index.min.js"></script>
  <script src="https://cdn.jsdelivr.net/npm/jsuites/dist/jsuites.min.js"></script>
  <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
</head>
<body>
  <h1>APIデータを取得して表示</h1>
  <button id="saveCsvBtn">CSVで保存</button>
  <div id="spreadsheet"></div>

  <script>
    let spreadsheetInstance;

    // JSONPlaceholder APIからデータを取得
    async function fetchData() {
      try {
        const response = await axios.get('https://jsonplaceholder.typicode.com/users');
        const users = response.data;

        // データをJspreadsheet用に整形
        const data = users.map(user => [
          user.id, user.name, user.username, user.email, user.address.city
        ]);

        // Jspreadsheetを初期化
        spreadsheetInstance = jspreadsheet(document.getElementById('spreadsheet'), {
          data: data,
          columns: [
            { type: 'number', title: 'ID', width: 50 },
            { type: 'text', title: 'Name', width: 150 },
            { type: 'text', title: 'Username', width: 100 },
            { type: 'text', title: 'Email', width: 200 },
            { type: 'text', title: 'City', width: 120 }
          ],
          pagination: 5,
          search: true
        });

      } catch (error) {
        console.error('データの取得に失敗しました:', error);
      }
    }

    // CSV保存ボタン
    document.getElementById('saveCsvBtn').addEventListener('click', () => {
      spreadsheetInstance.download({
        filename: 'spreadsheet-data.csv',
        delimiter: ','
      });
    });

    fetchData();
  </script>
</body>
</html>

いざ再実行!

やったね!

スクリーンショット 2024-12-18 7.44.32.png

CSVで保存を押す。
CSVファイルがダウンロードされた!。
開いてみよう。

スクリーンショット 2024-12-18 7.48.35.png

素晴らしいです。

右下の「2」を押すと
スクリーンショット 2024-12-18 7.49.51.png

いい感じ。

右上の「Search」に「Ka」と入れると
スクリーンショット 2024-12-18 7.51.22.png

セルに「Ka」が含まれる行だけが表示された! 便利。

以上、「ChatGPT先生にJspreadsheetを教えてもらう」でした。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?