How to Parse Data from a Spreadsheet Sent to an Email Trigger for Use in a Workflow?

This topic was automatically generated from Slack. You can find the original thread here.

Can you walk me through how I’d be able to parse the data in a spreadsheet sent to an email trigger, so I can use the data in my workflow?

To parse data from a spreadsheet sent to an email trigger and use it in your Pipedream workflow, you can follow these steps. This process involves receiving the email with the spreadsheet attachment, downloading the attachment to the /tmp directory, and then parsing the data from the spreadsheet for use in your workflow. 1. Set up the Email Trigger: First, ensure your workflow is triggered by emails. Pipedream provides a unique email address for your workflow. Any email sent to this address, including those with spreadsheet attachments, will trigger your workflow. 2. Download the Attachment: Use a code step to download the attachment from the email. You’ll likely need to inspect the steps.trigger.event object to find the URL of the attachment. Once you have the URL, you can download the file to the /tmp directory. 3. Parse the Spreadsheet: After downloading the file, you’ll need to parse the spreadsheet data. Depending on the format of the spreadsheet (e.g., CSV, XLSX), you may use different Node.js libraries like Papaparse for CSV or xlsx for XLSX files. These libraries allow you to read and parse the data from the spreadsheet. Here’s an example workflow step that outlines how you might download and parse a CSV file attachment: import fs from "fs"; import got from "got"; import { parse } from "papaparse"; export default defineComponent({ async run({ steps, $ }) { // Example URL - replace this with the actual attachment URL from the email const attachmentUrl = "URL_OF_THE_SPREADSHEET_ATTACHMENT"; const filePath = `/tmp/spreadsheet.csv`; // Download the spreadsheet attachment to the /tmp directory await got.stream(attachmentUrl).pipe(fs.createWriteStream(filePath)); // Read the downloaded file const csvFile = fs.readFileSync(filePath, "utf8"); // Parse the CSV data const parsedData = parse(csvFile, { header: true, // Assumes the first row contains column headers }); // parsedData.data contains the parsed CSV data // You can now use this data in your workflow console.log(parsedData.data); // Return the parsed data for use in subsequent steps return parsedData.data; }, }); This example assumes a CSV file and uses Papaparse for parsing. If your

When using this code, I get the following error:

ReferenceError
$fs is not defined

How can I fix this?

The error you’re encountering, “ReferenceError $fs is not defined”, suggests that you’re trying to use a variable $fs which hasn’t been defined or imported in your code. In Node.js, especially within the Pipedream environment, to work with the filesystem (for example, to write a file), you should use the fs module provided by Node.js. However, it’s important to note that in a Pipedream Node.js code step, you should use ESM (ECMAScript Modules) syntax for imports. Here’s how you can correctly use the fs module to write to a file in the /tmp directory, which is the writable directory in Pipedream’s environment: import fs from "fs"; import { file } from 'tmp-promise'; export default defineComponent({ async run({ steps, $ }) { const { path, cleanup } = await file(); await fs.promises.writeFile(path, "hello, world"); // Perform operations with the file here await cleanup(); // Clean up the temporary file when you're done } }); This example demonstrates how to create a temporary file, write “hello, world” to it, and then clean up the file. Make sure to replace the $fs reference in your code with the correct fs module usage as shown above. If you have further questions or need additional assistance, feel free to ask!