Closed17

JavaScriptでCSVファイルをごちゃごちゃ

ゆーけんゆーけん

やりたいこと

  1. 配列からCSVファイルを生成
  2. 既存のCSVファイルに、配列の値を結合。一つのCSVファイルとして出力
ゆーけんゆーけん

ライブラリを調査

ゆーけんゆーけん

GPTに雑に聞いた

function arrayToCSV(arr) {
    // 配列をCSV形式の文字列に変換
    const csvContent = arr.map(e => e.join(",")).join("\n");
    return csvContent;
}

function sendCSV(csvContent) {
    // CSVファイルをBlobとして作成
    const blob = new Blob([csvContent], { type: 'text/csv;charset=utf-8;' });
    
    // FormDataを使用してファイルをサーバーに送信
    const formData = new FormData();
    formData.append('file', blob, 'output.csv');

    // サーバーへのPOSTリクエスト
    fetch('/upload', { // /upload はサーバー側の受け取りURL
        method: 'POST',
        body: formData
    })
    .then(response => response.json())
    .then(data => {
        console.log('Success:', data);
    })
    .catch(error => {
        console.error('Error:', error);
    });
}

// サンプルのstring[]配列
const data = [
    ["Name", "Age", "City"],
    ["John Doe", "30", "New York"],
    ["Jane Smith", "25", "Los Angeles"],
    ["Jack White", "27", "Chicago"]
];

// CSVファイルを生成して送信
const csvContent = arrayToCSV(data);
sendCSV(csvContent);

ゆーけんゆーけん

BlobやらFileやら

ゆーけんゆーけん
const ids = ['hoge', 'fuga', 'piyo'];
const blob = new Blob(ids, { type: "text/csv" })

これでblobはできそう

ゆーけんゆーけん
const csvContent = ids.join("\n");
const fileName = `${new Date().toISOString().replace(/:/g, "-")}.csv`;
const file = new File([csvContent], fileName, { type: "text/csv" });

const result = await uploadFile(file);
ゆーけんゆーけん

2つのcsvファイルを結合したい

ゆーけんゆーけん
export const combineCsvFile = async (
  csvFiles: [File, File],
  fileName: string,
): Promise<Result<File, Error>> => {
  try {
    const csvContent = csvFiles
      .map(async (csvFile) => {
        const csvBufferByCsvFile = await csvFile.arrayBuffer();
        const csvContentByCsvFile = new TextDecoder().decode(
          csvBufferByCsvFile,
        );
        return csvContentByCsvFile;
      })
      .join("\n");
    const convertedFile = new File([csvContent], fileName, {
      type: "text/csv",
    });
    return createOk(convertedFile);
  } catch (e) {
    return createErr(new InternalError("combineCsvFile", { cause: e }));
  }
};

このスクラップは2024/08/28にクローズされました