{"id":14070453,"url":"https://github.com/microsoft/connected-workbooks","last_synced_at":"2026-03-10T14:34:43.582Z","repository":{"id":39830171,"uuid":"327310122","full_name":"microsoft/connected-workbooks","owner":"microsoft","description":"Microsoft backed, Excel advanced xlsx workbook generation JavaScript library","archived":false,"fork":false,"pushed_at":"2026-03-02T15:12:24.000Z","size":15179,"stargazers_count":80,"open_issues_count":10,"forks_count":26,"subscribers_count":5,"default_branch":"main","last_synced_at":"2026-03-02T18:36:10.511Z","etag":null,"topics":["excel","excel-automation","excel-export","excel-exporter","excel-js","excel-online","excel-template","export","export-to-excel","office","office365","open-in-excel","power","powerquery","query","typescript","typescript-library","xl","xlsx","xlsx-export"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/microsoft.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":"SUPPORT.md","governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2021-01-06T12:49:59.000Z","updated_at":"2026-03-02T15:05:42.000Z","dependencies_parsed_at":"2024-01-29T15:20:45.235Z","dependency_job_id":"42318f14-c661-4bf5-9482-e842bf6b54be","html_url":"https://github.com/microsoft/connected-workbooks","commit_stats":{"total_commits":83,"total_committers":8,"mean_commits":10.375,"dds":0.6265060240963856,"last_synced_commit":"af8fb78d0fa7c870fff66b1269c7c4f11c0c4c58"},"previous_names":[],"tags_count":10,"template":false,"template_full_name":null,"purl":"pkg:github/microsoft/connected-workbooks","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/microsoft%2Fconnected-workbooks","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/microsoft%2Fconnected-workbooks/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/microsoft%2Fconnected-workbooks/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/microsoft%2Fconnected-workbooks/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/microsoft","download_url":"https://codeload.github.com/microsoft/connected-workbooks/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/microsoft%2Fconnected-workbooks/sbom","scorecard":{"id":643301,"data":{"date":"2025-08-11","repo":{"name":"github.com/microsoft/connected-workbooks","commit":"14535b624c836fd407d7a8af26cf9acce61ef2b6"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":6.5,"checks":[{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Maintained","score":10,"reason":"28 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Security-Policy","score":10,"reason":"security policy file detected","details":["Info: security policy file detected: SECURITY.md:1","Info: Found linked content: SECURITY.md:1","Info: Found disclosure, vulnerability, and/or timelines in security policy: SECURITY.md:1","Info: Found text in security policy: SECURITY.md:1"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Code-Review","score":10,"reason":"all changesets reviewed","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Signed-Releases","score":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact v1.0.0 not signed: https://api.github.com/repos/microsoft/connected-workbooks/releases/70923313","Warn: release artifact v1.0.0 does not have provenance: https://api.github.com/repos/microsoft/connected-workbooks/releases/70923313"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":6,"reason":"branch protection is not maximal on development and all release branches","details":["Info: 'allow deletion' disabled on branch 'main'","Info: 'force pushes' disabled on branch 'main'","Warn: 'branch protection settings apply to administrators' is disabled on branch 'main'","Warn: 'stale review dismissal' is disabled on branch 'main'","Warn: required approving review count is 1 on branch 'main'","Warn: codeowners review is required - but no codeowners file found in repo","Info: 'last push approval' is required to merge on branch 'main'","Warn: no status checks found to merge onto branch 'main'","Info: PRs are required in order to make changes on branch 'main'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 30 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-21T11:24:16.173Z","repository_id":39830171,"created_at":"2025-08-21T11:24:16.173Z","updated_at":"2025-08-21T11:24:16.173Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30124160,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-05T11:11:57.947Z","status":"ssl_error","status_checked_at":"2026-03-05T11:11:29.001Z","response_time":93,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["excel","excel-automation","excel-export","excel-exporter","excel-js","excel-online","excel-template","export","export-to-excel","office","office365","open-in-excel","power","powerquery","query","typescript","typescript-library","xl","xlsx","xlsx-export"],"created_at":"2024-08-13T07:07:46.514Z","updated_at":"2026-03-10T14:34:43.574Z","avatar_url":"https://github.com/microsoft.png","language":"TypeScript","funding_links":[],"categories":["TypeScript"],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n# Open In Excel\n\n[![TypeScript](https://img.shields.io/badge/TypeScript-007ACC?style=flat\u0026logo=typescript\u0026logoColor=white)](https://www.typescriptlang.org/)\n[![License](https://img.shields.io/github/license/microsoft/connected-workbooks)](https://github.com/microsoft/connected-workbooks/blob/master/LICENSE)\n[![npm version](https://img.shields.io/npm/v/@microsoft/connected-workbooks)](https://www.npmjs.com/package/@microsoft/connected-workbooks)\n[![Build Status](https://img.shields.io/github/workflow/status/microsoft/connected-workbooks/CI)](https://github.com/microsoft/connected-workbooks/actions)\n\n**Open your data directly in Excel for the Web with zero installation** - A JavaScript library that converts web tables and data into interactive Excel workbooks with Power Query integration and custom branded templates\n\n\u003cdiv align=\"center\"\u003e\n\u003ca href=\"https://aka.ms/OpenInExcelREADME\" target=\"_blank\"\u003e\n  \u003cimg src=\"./assets/template example.gif\" alt=\"Connected Workbooks Demo - Click to watch video\" \u003e\n  \u003cbr/\u003e\n  \u003cstrong\u003e📺 Watch the video tutorial\u003c/strong\u003e\n\u003c/a\u003e\n\u003c/div\u003e\n\n\n\u003c/div\u003e\n\n---\n\n## ✨ Key Features \u0026 Benefits\n\nTransform your web applications with enterprise-grade Excel integration that goes far beyond simple CSV exports.\n\n### 🎯 **Interactive Excel Workbooks, Not Static Files**\nConvert raw data or HTML tables arrays to Excel tables while preserving data types, ensuring your data maintains its structure and formatting. instead of basic CSV exports that lose all structure and functionality.\n\n### 🌐 **Zero-Installation Excel Experience**\nLaunch workbooks directly in Excel for the Web through any browser without requiring Excel desktop installation, making your data accessible to any user anywhere. No installation required, works on any device.\n\n### 🎨 **Corporate Branding \u0026 Custom Dashboards**\nInject your data into pre-built Excel templates containing your company branding, PivotTables, charts, and business logic while preserving all formatting and calculations. Use your own branded Excel templates with PivotTables and charts to maintain corporate identity and pre-built analytics.\n\n### 🔄 **Live Data Connections with Power Query**\nCreate workbooks that automatically refresh from your web APIs, databases, or data sources using Microsoft's Power Query technology, eliminating manual data updates. Create workbooks that refresh data on-demand using Power Query for real-time data updates and automated reporting.\n\n### ⚙️ **Advanced Configuration**\nFull control over document properties including title and description for professional document management, allowing you to customize metadata and maintain enterprise standards.\n\n---\n\n## 🏢 Where is this library used?\n\nOpen In Excel powers data export functionality across Microsoft's enterprise platforms:\n\n\u003cdiv align=\"center\"\u003e\n\n|\u003cimg src=\"https://github.com/microsoft/connected-workbooks/assets/7674478/b7a0c989-7ba4-4da8-851e-04650d8b600e\" alt=\"Azure Data Explorer\" width=\"48\"/\u003e|\u003cimg src=\"https://github.com/microsoft/connected-workbooks/assets/7674478/76d22d23-5f2b-465f-992d-f1c71396904c\" alt=\"Log Analytics\" width=\"48\"/\u003e|\u003cimg src=\"https://github.com/microsoft/connected-workbooks/assets/7674478/436b4f53-bf25-4c45-aae5-55ee1b1feafc\" alt=\"Datamart\" width=\"48\"/\u003e|\u003cimg src=\"https://github.com/microsoft/connected-workbooks/assets/7674478/3965f684-b461-42fe-9c62-e3059c0286eb\" alt=\"Viva Sales\" width=\"48\"/\u003e|\n|:---:|:---:|:---:|:---:|\n|**Azure Data Explorer**|**Log Analytics**|**Datamart**|**Viva Sales**|\n\n\u003c/div\u003e\n\n\n\n---\n\n## 🚀 Quick Start\n\n### Installation\n\n```bash\nnpm install @microsoft/connected-workbooks\n```\n\n---\n\n## 💡 Usage Examples\n\n### 📋 **HTML Table Export**\n\nPerfect for quick data exports from existing web tables.\n\n```typescript\nimport { workbookManager } from '@microsoft/connected-workbooks';\n\n// One line of code to convert any table\nconst blob = await workbookManager.generateTableWorkbookFromHtml(\n  document.querySelector('table') as HTMLTableElement\n);\n\n// Open in Excel for the Web\n// Edit mode with full editing capabilities (default)\nworkbookManager.openInExcelWeb(blob, \"QuickExport.xlsx\");\n\n// View mode with typing disabled\nworkbookManager.openInExcelWeb(blob, \"QuickExport.xlsx\", false, false);\n\n// View mode with typing enabled\nworkbookManager.openInExcelWeb(blob, \"QuickExport.xlsx\", true, false);\n```\n\n### 📊 **Smart Data Formatting**\n\nTransform raw data arrays into professionally formatted Excel tables.\n\n```typescript\nimport { workbookManager } from '@microsoft/connected-workbooks';\n\nconst salesData = {\n  config: {\n    promoteHeaders: true,      // First row becomes headers\n    adjustColumnNames: true    // Clean up column names\n  },\n  data: [\n    [\"Product\", \"Revenue\", \"InStock\", \"Category\", \"LastUpdated\"],\n    [\"Surface Laptop\", 1299.99, true, \"Hardware\", \"2024-10-26\"],\n    [\"Office 365\", 99.99, true, \"Software\", \"2024-10-26\"],\n    [\"Azure Credits\", 500.00, false, \"Cloud\", \"2024-10-25\"],\n    [\"Teams Premium\", 149.99, true, \"Software\", \"2024-10-24\"]\n  ]\n};\n\nconst blob = await workbookManager.generateTableWorkbookFromGrid(salesData);\nworkbookManager.openInExcelWeb(blob, \"SalesReport.xlsx\", true);\n```\n\n\u003cdiv align=\"center\"\u003e\n\u003cimg width=\"450\" alt=\"Smart Formatted Excel Table\" src=\"https://github.com/microsoft/connected-workbooks/assets/7674478/b91e5d69-8444-4a19-a4b0-3fd721e5576f\"\u003e\n\u003c/div\u003e\n\n\n\n### 🎨 **Custom Branded Templates**\n\nTransform your data using pre-built Excel templates with your corporate branding.\n\n\n\n**Steps:**\n\n1.  **Prepare Your Template File**\n\n    Open Excel and create (or open) your branded file.\n2.  **Pick one sheet that will hold your data.**\n\n    The default \"Sheet1\"(3)\n3.  **Inside that sheet, choose were you want your data to be populated(1) and create a table (Insert → Table).**\n\n    The default table name is Table1(2)  \n    The table need to have the same column structure as your incoming data.\n4.  **Add any charts, formulas, or formatting that reference this table.**\n\n    Example: Pie chart using Gross column(4).\n5.  **Save the Excel file (e.g., my-template.xlsx).**\n6.  **Use the saved file as the template for your incoming data**\n\nThe library will then populate the designated table with your data. Any functions, figures, or references linked to this table within the Excel template will automatically reflect the newly exported data.\n\n\u003cdiv align=\"center\"\u003e\n\u003cimg  alt=\"Custom Branded Excel Dashboard\" src=\"./assets/template_before_after.png\"\u003e\n\u003c/div\u003e\n\n\u003cdiv align=\"center\"\u003e\n  \u003c!-- Template example downloads --\u003e\n  \u003ca href=\"./assets/before.xlsx\" download\u003eDownload before.xlsx\u003c/a\u003e • \u003ca href=\"./assets/after.xlsx\" download\u003eDownload after.xlsx\u003c/a\u003e\n\u003c/div\u003e\n\n#### 📁 **Loading Template Files**\n\n```typescript\n// Method 1: File upload from user\nconst templateInput = document.querySelector('#template-upload') as HTMLInputElement;\nconst templateFile = templateInput.files[0];\n\n// Method 2: Fetch from your server\nconst templateResponse = await fetch('/assets/templates/sales-dashboard.xlsx');\nconst templateFile = await templateResponse.blob();\n\n// Method 3: Drag and drop\nfunction handleTemplateDrop(event: DragEvent) {\n  const templateFile = event.dataTransfer.files[0];\n  // Use templateFile with the library\n}\n```\n\n#### 📊 **Generate Branded Workbook**\n\n```typescript\nconst quarterlyData = {\n  config: { promoteHeaders: true, adjustColumnNames: true },\n  data: [\n    [\"Region\", \"Q3_Revenue\", \"Q4_Revenue\", \"Growth\", \"Target_Met\"],\n    [\"North America\", 2500000, 2750000, \"10%\", true],\n    [\"Europe\", 1800000, 2100000, \"17%\", true],\n    [\"Asia Pacific\", 1200000, 1400000, \"17%\", true],\n    [\"Latin America\", 800000, 950000, \"19%\", true]\n  ]\n};\n\n// Inject data into your branded template\nconst blob = await workbookManager.generateTableWorkbookFromGrid(\n  quarterlyData,\n  undefined, // Use template's existing data structure\n  {\n    templateFile: templateFile,\n    TempleteSettings: {\n      sheetName: \"Dashboard\",     // Target worksheet\n      tableName: \"QuarterlyData\"  // Target table name\n    }\n  }\n);\n\n// Users get a fully branded report\nworkbookManager.openInExcelWeb(blob, \"Q4_Executive_Dashboard.xlsx\", true);\n```\n\n\u003cdiv align=\"center\"\u003e\n\u003cimg  alt=\"Custom Branded Excel Dashboard\" src=\"./assets/template_example.png\"\u003e\n\u003c/div\u003e\n\n\u003e 💡 **Template Requirements**: Include a query named **\"Query1\"** connected to a **Table**.\n\n### 🔄 **Live Data Connections with Power Query**\n\nCreate workbooks that automatically refresh from your data sources.\n\n```typescript\nimport { workbookManager } from '@microsoft/connected-workbooks';\n\n// Create a workbook that connects to your API\nconst blob = await workbookManager.generateSingleQueryWorkbook({\n  queryMashup: `let \n    Source = {1..10} \n  in \n    Source`,\n  refreshOnOpen: true\n});\n\nworkbookManager.openInExcelWeb(blob, \"MyData.xlsx\", true);\n```\n\n\u003e 📚 **Learn Power Query**: New to Power Query? Check out the [official documentation](https://docs.microsoft.com/en-us/power-query/) to unlock the full potential of live data connections.\n\n\u003cdiv align=\"center\"\u003e\n\u003cimg width=\"120\" alt=\"Live Data Workbook\" src=\"https://github.com/microsoft/connected-workbooks/assets/7674478/57bd986c-6309-4963-8d86-911ccf496c3f\"\u003e\n\u003c/div\u003e\n### 📄 **Professional Document Properties**\n\nAdd metadata and professional document properties for enterprise use.\n\n```typescript\nconst blob = await workbookManager.generateTableWorkbookFromHtml(\n  document.querySelector('table') as HTMLTableElement, \n  {\n    docProps: { \n      createdBy: 'John Doe',\n      lastModifiedBy: 'Jane Doe',\n      description: 'Sales Report Q4 2024',\n      title: 'Quarterly Sales Data'\n    }\n  }\n);\n\n// Download for offline use\nworkbookManager.downloadWorkbook(blob, \"MyTable.xlsx\");\n```\n\n\u003cdiv align=\"center\"\u003e\n\u003cimg width=\"400\" alt=\"Professional Document Properties\" src=\"https://github.com/microsoft/connected-workbooks/assets/7674478/c267c9eb-6367-419d-832d-5a835c7683f9\"\u003e\n\u003c/div\u003e\n\n## 📚 Complete API Reference\n\n### Core Functions\n\n#### 🔗 `generateSingleQueryWorkbook()`\nCreate Power Query connected workbooks with live data refresh capabilities.\n\n```typescript\nasync function generateSingleQueryWorkbook(\n  query: QueryInfo, \n  grid?: Grid, \n  fileConfigs?: FileConfigs\n): Promise\u003cBlob\u003e\n```\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| `query` | [`QueryInfo`](#queryinfo) | ✅ **Required** | Power Query configuration |\n| `grid` | [`Grid`](#grid) |  Optional | Pre-populate with data |\n| `fileConfigs` | [`FileConfigs`](#fileconfigs) |  Optional | Customization options |\n\n#### 📋 `generateTableWorkbookFromHtml()`\nConvert HTML tables to Excel workbooks instantly.\n\n```typescript\nasync function generateTableWorkbookFromHtml(\n  htmlTable: HTMLTableElement, \n  fileConfigs?: FileConfigs\n): Promise\u003cBlob\u003e\n```\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| `htmlTable` | `HTMLTableElement` | ✅ **Required** | Source HTML table |\n| `fileConfigs` | [`FileConfigs`](#fileconfigs) |  Optional | Customization options |\n\n#### 📊 `generateTableWorkbookFromGrid()`\nTransform raw data arrays into formatted Excel tables.\n\n```typescript\nasync function generateTableWorkbookFromGrid(\n  grid: Grid, \n  fileConfigs?: FileConfigs\n): Promise\u003cBlob\u003e\n```\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| `grid` | [`Grid`](#grid) | ✅ **Required** | Data and configuration |\n| `fileConfigs` | [`FileConfigs`](#fileconfigs) |  Optional | Customization options |\n\n#### 🌐 `openInExcelWeb()`\nOpen workbooks directly in Excel for the Web.\n\n```typescript\nasync function openInExcelWeb(\n  blob: Blob,\n  filename?: string,\n  allowEdit?: boolean\n): Promise\u003cvoid\u003e\n```\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| `blob` | `Blob` | ✅ **Required** | Generated workbook |\n| `filename` | `string` |  Optional | Custom filename |\n| `allowEdit` | `boolean` |  Optional | Open in edit mode with full editing capabilities (default: **true**) |\n\n#### 💾 `downloadWorkbook()`\nTrigger browser download of the workbook.\n\n```typescript\nfunction downloadWorkbook(file: Blob, filename: string): void\n```\n\n#### 🔗 `getExcelForWebWorkbookUrl()`\nGet the Excel for Web URL without opening (useful for custom integrations).\n\n```typescript\nasync function getExcelForWebWorkbookUrl(\n  file: Blob,\n  filename?: string,\n  allowEdit?: boolean\n): Promise\u003cstring\u003e\n```\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| `file` | `Blob` | ✅ **Required** | Generated workbook |\n| `filename` | `string` |  Optional | Custom filename |\n| `allowEdit` | `boolean` |  Optional | Use edit URL with full editing capabilities (default: **true**) |\n\n---\n\n## 🔧 Type Definitions\n\n### QueryInfo\nPower Query configuration for connected workbooks.\n\n```typescript\ninterface QueryInfo {\n  queryMashup: string;        // Power Query M language code\n  refreshOnOpen: boolean;     // Auto-refresh when opened\n  queryName?: string;         // Query identifier (default: \"Query1\")\n}\n```\n\n### Grid\nData structure for tabular information.\n\n```typescript\ninterface Grid {\n  data: (string | number | boolean)[][];  // Raw data rows\n  config?: GridConfig;                    // Processing options\n}\n\ninterface GridConfig {\n  promoteHeaders?: boolean;     // Use first row as headers\n  adjustColumnNames?: boolean;  // Fix duplicate/invalid names\n}\n```\n\n### FileConfigs\nAdvanced customization options.\n\n```typescript\ninterface FileConfigs {\n  templateFile?: File | Buffer;        // Custom Excel template\n  docProps?: DocProps;                 // Document metadata\n  hostName?: string;                   // Creator application name\n  TempleteSettings?: TempleteSettings; // Template-specific settings\n}\n\ninterface TempleteSettings {\n  tableName?: string;    // Target table name in template\n  sheetName?: string;    // Target worksheet name\n}\n```\n\n### DocProps\nDocument metadata and properties.\n\n```typescript\ninterface DocProps {\n  title?: string;           // Document title\n  subject?: string;         // Document subject\n  keywords?: string;        // Search keywords\n  createdBy?: string;       // Author name\n  description?: string;     // Document description\n  lastModifiedBy?: string;  // Last editor\n  category?: string;        // Document category\n  revision?: string;        // Version number\n}\n```\n\n---\n\n## Contributing\n\nThis project welcomes contributions and suggestions. Most contributions require you to agree to a\nContributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us\nthe rights to use your contribution. For details, visit https://cla.opensource.microsoft.com.\n\nWhen you submit a pull request, a CLA bot will automatically determine whether you need to provide\na CLA and decorate the PR appropriately (e.g., status check, comment). Simply follow the instructions\nprovided by the bot. You will only need to do this once across all repos using our CLA.\n\nThis project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/).\nFor more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or\ncontact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments.\n\n### Getting Started\n1. Fork the repository\n2. Create a feature branch\n3. Make your changes\n4. Add tests for new functionality\n5. Submit a pull request\n\n### Development Setup\n```bash\ngit clone https://github.com/microsoft/connected-workbooks.git\ncd connected-workbooks\nnpm install\nnpm run build\nnpm test\n```\n---\n\n## 📄 License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n## 🔗 Related Resources\n\n- [📖 Power Query Documentation](https://powerquery.microsoft.com/en-us/)\n- [🏢 Excel for Developers](https://docs.microsoft.com/en-us/office/dev/excel/)\n- [🔧 Microsoft Graph Excel APIs](https://docs.microsoft.com/en-us/graph/api/resources/excel)\n\n---\n\n## Trademarks\n\nThis project may contain trademarks or logos for projects, products, or services. Authorized use of Microsoft\ntrademarks or logos is subject to and must follow\n[Microsoft's Trademark \u0026 Brand Guidelines](https://www.microsoft.com/en-us/legal/intellectualproperty/trademarks/usage/general).\nUse of Microsoft trademarks or logos in modified versions of this project must not cause confusion or imply Microsoft sponsorship.\nAny use of third-party trademarks or logos are subject to those third-party's policies.\n\n---\n\n## Keywords\n\nPower Query, Excel, Office, Workbook, Refresh, Table, xlsx, export, CSV, data export, HTML table, web to Excel, JavaScript Excel, TypeScript Excel, Excel template, PivotTable, connected data, live data, data refresh, Excel for Web, browser Excel, spreadsheet, data visualization, Microsoft Office, Office 365, Excel API, workbook generation, table export, grid export, Excel automation, data processing, business intelligence\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmicrosoft%2Fconnected-workbooks","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmicrosoft%2Fconnected-workbooks","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmicrosoft%2Fconnected-workbooks/lists"}