<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Broggi Quentin</title>
    <description>The latest articles on DEV Community by Broggi Quentin (@broggi).</description>
    <link>https://dev.to/broggi</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F964951%2F13cd10e1-82a0-4c2b-832f-5fa28f2be5c7.png</url>
      <title>DEV Community: Broggi Quentin</title>
      <link>https://dev.to/broggi</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/broggi"/>
    <language>en</language>
    <item>
      <title>Clipboard API and Angular</title>
      <dc:creator>Broggi Quentin</dc:creator>
      <pubDate>Fri, 02 Feb 2024 15:10:25 +0000</pubDate>
      <link>https://dev.to/broggi/clipboard-api-and-angular-g8g</link>
      <guid>https://dev.to/broggi/clipboard-api-and-angular-g8g</guid>
      <description>&lt;p&gt;In this article, I will show you how to display an image copied directly into your application using Ctrl+V.&lt;br&gt;
Configuration in the Template&lt;/p&gt;

&lt;p&gt;In your template, you will create a div that listens to the (paste) event. This event will be triggered when the user performs a CTRL+V, and it defines an area in your application where users can paste content:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;div style="height: 500px; width: 500px;" (paste)="onPaste($event)" &amp;gt;

      &amp;lt;img *ngIf="imageSrc" [src]="imageSrc" alt="Pasted Image"&amp;gt;

  &amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Processing Clipboard Data&lt;/p&gt;

&lt;p&gt;This will provide you with a ClipboardEvent, in which you can find everything that has been copied, be it text, an image, a PDF file, etc. Here, I will filter based on the MIME type of the file to ensure it is indeed an image. However, you can also paste other file types like a Word or PDF file directly into an , for example, using Ctrl+V.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;public onPaste(event: ClipboardEvent): void {

    const clipboardData = event.clipboardData;

    if (clipboardData) {

      const items = clipboardData.items;

    // Check if there is at least one item and if the first item is an         image

      if (items.length &amp;gt; 0 &amp;amp;&amp;amp; items[0].type.indexOf('image') !== -1) {

// Attempt to retrieve the image file from the clipboard item

        const blob = items[0].getAsFile();

        if (blob) {

          const reader = new FileReader();

          reader.onload = (event: ProgressEvent&amp;lt;FileReader&amp;gt;) =&amp;gt; {

            if (event.target)

            // Setting the component's imageSrc property to the base64 data URL of the image

              this.imageSrc = event.target.result as string;

          };

          reader.readAsDataURL(blob);

        }

      }

    }

  }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Remember to declare your imageSrc as public:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  public imageSrc = "";
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Global Listening on the Document&lt;/p&gt;

&lt;p&gt;You also have the option to set up global listening on the entire document, not just on a div, in this manner:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;constructor(@Inject(DOCUMENT) private document: Document) { }

  ngOnInit() {

      this.document.addEventListener('paste', this.onPaste.bind(this));

  }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This way, no matter where the focus is, you can retrieve the file.&lt;/p&gt;

</description>
      <category>typescript</category>
      <category>angular</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Avoiding Input Issues with MatDatepicker in Angular</title>
      <dc:creator>Broggi Quentin</dc:creator>
      <pubDate>Fri, 20 Oct 2023 13:57:43 +0000</pubDate>
      <link>https://dev.to/broggi/avoiding-input-issues-with-matdatepicker-in-angular-gi4</link>
      <guid>https://dev.to/broggi/avoiding-input-issues-with-matdatepicker-in-angular-gi4</guid>
      <description>&lt;p&gt;When using the Angular Material Datepicker (MatDatepicker), developers often face formatting challenges, especially when dates are manually input by the user. The material-moment-adapter provides an elegant solution to handle these issues.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Date Format Issue During Manual Input
&lt;/h2&gt;

&lt;p&gt;When using the MatDatepicker, if a user manually enters a date in the format dd/mm/yyyy (french format date) and the focus changes, the date might automatically be interpreted as the yyyy-dd-mm format. This unexpected transformation can lead to confusion and input errors. To address this behavior, we can configure a custom date format with MomentDateAdapter.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Timezone Conversion Issues with GMT +1
&lt;/h2&gt;

&lt;p&gt;Another common issue faced is when the date 12/06/2023 00:00:00 becomes 11/06/2023 23:00:00 due to GMT +1 timezone conversion. This unintended shift can cause confusion and inaccuracies.&lt;/p&gt;

&lt;p&gt;The solution is to utilize the useUtc: true option provided by the material-moment-adapter. When this option is set to true, dates won’t undergo undesired timezone adjustments.&lt;/p&gt;

&lt;h2&gt;
  
  
  Implementation Guide
&lt;/h2&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Install the necessary dependencies:
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;code&gt;npm install @angular/material-moment-adapter moment&lt;/code&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;In your module configuration, import the necessary modules and provide custom date format:
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;`import { MomentDateAdapter, MAT_MOMENT_DATE_ADAPTER_OPTIONS } from '@angular/material-moment-adapter';&lt;/p&gt;

&lt;p&gt;export const CUSTOM_DATE_FORMAT = {&lt;br&gt;
  parse: {&lt;br&gt;
    dateInput: 'DD/MM/YYYY',&lt;br&gt;
  },&lt;br&gt;
  display: {&lt;br&gt;
    dateInput: 'DD/MM/YYYY',&lt;br&gt;
    monthYearLabel: 'MMMM YYYY',&lt;br&gt;
    dateA11yLabel: 'DD/MM/YYYY',&lt;br&gt;
    monthYearA11yLabel: 'MMMM YYYY',&lt;br&gt;
  },&lt;br&gt;
};&lt;/p&gt;

&lt;p&gt;@NgModule({&lt;br&gt;
  ...&lt;br&gt;
  providers: [&lt;br&gt;
    { provide: MAT_DATE_LOCALE, useValue: 'fr-FR' },&lt;br&gt;
    { provide: MAT_DATE_FORMATS, useValue: CUSTOM_DATE_FORMAT },&lt;br&gt;
    { provide: DateAdapter, useClass: MomentDateAdapter },&lt;br&gt;
    { provide: MAT_MOMENT_DATE_ADAPTER_OPTIONS, useValue: { useUtc: true } },&lt;br&gt;
  ],&lt;br&gt;
  ...&lt;br&gt;
})`&lt;/p&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;With the above configuration, MatDatepicker will now correctly interpret manually entered dates and avoid unwanted timezone transformations.&lt;br&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h2&gt;
&lt;br&gt;
  &lt;br&gt;
  &lt;br&gt;
  Conclusion&lt;br&gt;
&lt;/h2&gt;

&lt;p&gt;The Angular Material Datepicker is a versatile component, but it’s essential to handle date formatting and timezone issues for a seamless user experience. By leveraging material-moment-adapter and the configurations outlined above, developers can ensure consistent and accurate date input and display.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>angular</category>
      <category>programming</category>
      <category>date</category>
    </item>
    <item>
      <title>Insert images in a PowerPoint template with BroggiSoft.OfficeExport</title>
      <dc:creator>Broggi Quentin</dc:creator>
      <pubDate>Sat, 28 Jan 2023 15:19:01 +0000</pubDate>
      <link>https://dev.to/broggi/insert-images-in-a-powerpoint-template-with-broggisoftofficeexport-5go5</link>
      <guid>https://dev.to/broggi/insert-images-in-a-powerpoint-template-with-broggisoftofficeexport-5go5</guid>
      <description>&lt;p&gt;Here is an example of using BroggiBoft.OfficeExport to insert an image into a PowerPoint template:&lt;/p&gt;

&lt;p&gt;First, you need to create a PowerPoint template containing a tag for the image that you want to insert. To do this, you must create a Rectangle shape of the desired size and put a &lt;code&gt;{{Img=YourNameValue}}&lt;/code&gt; tag inside. For this in PowerPoint go to Insert &amp;gt; Shapes &amp;gt; Rectangle.&lt;br&gt;
For this example the value of YourNameValue is logo.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzks44rdljocm8ppp6yrh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzks44rdljocm8ppp6yrh.png" alt="PowerPoint template with tags" width="605" height="325"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Next you need to convert the image you want to insert to base64. You can use the Convert.ToBase64String class to convert the image to a base64 string.&lt;/p&gt;

&lt;p&gt;Create a dictionary that contains the image data with the key name that matches the tag in the template.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;var imageBase64 = Convert.ToBase64String(File.ReadAllBytes("logo.png"));
Dictionary&amp;lt;string, string&amp;gt; data = new Dictionary&amp;lt;string, string&amp;gt;();
data.Add("logo", imageBase64);
data.Add("title", "OfficeExport Example");

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Install the nuget package BroggiSoft.OfficeExport from: &lt;a href="https://www.nuget.org/packages/BroggiSoft.OfficeExport/" rel="noopener noreferrer"&gt;https://www.nuget.org/packages/BroggiSoft.OfficeExport/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Finally, use the ExportFromDictionary method of the OfficeExport class to replace the tags in the template with the image data.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;OfficeExport.ExportFromDictionary("template.docx", "output.docx", data);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The output file "output.pptx" will now contain the image inserted into the Shape Rectangle named "logo" in the template, and the title will have been replaced by its corresponding value (here: OfficeExport Example).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh8x5j0f8iz6zbi6tsqcg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh8x5j0f8iz6zbi6tsqcg.png" alt="The powerpoint output after replacing the tags" width="605" height="325"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It's important to note that you can use the same steps to insert images into Word and Excel templates.&lt;/p&gt;

&lt;p&gt;You can find a test project on GitHub: &lt;a href="https://github.com/BroggiQ/OfficeExportTest" rel="noopener noreferrer"&gt;OfficeExportTest&lt;/a&gt;&lt;/p&gt;

</description>
      <category>gratitude</category>
    </item>
    <item>
      <title>How to download a file in Angular .NET</title>
      <dc:creator>Broggi Quentin</dc:creator>
      <pubDate>Fri, 27 Jan 2023 16:49:08 +0000</pubDate>
      <link>https://dev.to/broggi/how-to-download-a-file-in-angular-net-58ki</link>
      <guid>https://dev.to/broggi/how-to-download-a-file-in-angular-net-58ki</guid>
      <description>&lt;p&gt;In this article, I will show you how to download a file in an Angular project with a .NET 5+ Web Api.&lt;/p&gt;

&lt;h2&gt;
  
  
  .NET Side
&lt;/h2&gt;

&lt;p&gt;You need to create a controller, for example DownloadController, with a DownloadFile Api of HttpGet type. If you want you can send the file name to be downloaded as a parameter for this Api. &lt;/p&gt;

&lt;p&gt;First, transform your file into a byte array or via a memoryStream, then return it in a FileContentResult by passing your byte array, the "application/octet-stream" type and the name of your file.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
[Route("api/[controller]")]
public class DownloadController : Controller
{

        [HttpGet]
        public async Task&amp;lt;IActionResult&amp;gt; DownloadFile()
        {
            //Set your file path here
            var path = Path.Combine(Directory.GetCurrentDirectory(), "Ressources", "Example.docx");
            //Check if the file exists
            if (!System.IO.File.Exists(path))
                return NotFound();
            //Get Bytes array of your file, you can also to do a MemoryStream
            Byte[] bytes = await System.IO.File.ReadAllBytesAsync(path);

            //Return your FileContentResult
            return File(bytes, "application/octet-stream", "Example.docx");

        }
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Angular Side
&lt;/h2&gt;

&lt;p&gt;In your service create a function to call the .Net Api, you need to specify ‘blob’ for the responseType like this :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  downloadFile() {
    return this.http.get('http://localhost:5000/api/download/', { responseType: 'blob' });
  }

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In Angular the best library to download file is file-saver that you can install with : &lt;br&gt;
npm i file-saver&lt;/p&gt;

&lt;p&gt;Write a function in your component to call your service.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  download() {
    this.fileService.downloadFile()
      .subscribe(data =&amp;gt; saveAs(data, 'Example.docx'));
  }

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then add the import for use file-saver.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import { saveAs } from "file-saver";
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And it works.&lt;/p&gt;

</description>
      <category>csharp</category>
      <category>dotnet</category>
      <category>programming</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>How to send File from Angular To Web Api C# .Net</title>
      <dc:creator>Broggi Quentin</dc:creator>
      <pubDate>Fri, 27 Jan 2023 09:24:44 +0000</pubDate>
      <link>https://dev.to/broggi/how-to-send-file-from-angular-to-web-api-c-net-258g</link>
      <guid>https://dev.to/broggi/how-to-send-file-from-angular-to-web-api-c-net-258g</guid>
      <description>&lt;p&gt;Passing a file from Angular to a C# Web API with .NET 5.0 can be useful when you need to upload a file to your server for processing or storage. Here's how:&lt;/p&gt;

&lt;p&gt;1: You need to configure your C# Web API to accept uploaded files. To do this, you need to add a controller action that takes as input an object of type IFormFile. Here's what it might look like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[HttpPost]
public async Task&amp;lt;IActionResult&amp;gt; UploadFile([FromForm] IFormFile file)
{
    byte[] fileBytes;
    using (var ms = new MemoryStream())
    {
        file.CopyTo(ms);
        fileBytes = ms.ToArray();
        // File processing

    }
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;2: In your Angular application, you need to use the FormData object to construct an HTTP POST request containing the file to upload. You can use the append() method of FormData to add the file to the request:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;uploadFile(file: File) {
    const formData = new FormData();

    formData.append('file', file, file.name);

    this.http.post('/api/upload', formData).subscribe(...);
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Note that in .NET 5.0 you can also use the IFormFileCollection interface to accept multiple files in a single controller action:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[HttpPost]
public async Task&amp;lt;IActionResult&amp;gt; ([FromForm] IFormFileCollection files)
{
     // File processing
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;uploadFiles(files: FileList) {
    const formData = new FormData();

    for (let i = 0; i &amp;lt; files.length; i++) {
        formData.append('files', files[i], files[i].name);
    }

    this.http.post('/api/upload', formData).subscribe(...);
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>csharp</category>
      <category>dotnet</category>
      <category>programming</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>How to mail merge in .Net with BroggiSoft.OfficeExport</title>
      <dc:creator>Broggi Quentin</dc:creator>
      <pubDate>Fri, 04 Nov 2022 11:06:01 +0000</pubDate>
      <link>https://dev.to/broggi/documents-generation-with-broggisoftofficeexport-4f68</link>
      <guid>https://dev.to/broggi/documents-generation-with-broggisoftofficeexport-4f68</guid>
      <description>&lt;p&gt;I created a Nuget package, &lt;a href="https://www.nuget.org/packages/BroggiSoft.OfficeExport" rel="noopener noreferrer"&gt;BroggiSoft.OfficeExport&lt;/a&gt;, to easily export data to an office document (Word, Excel and PowerPoint).&lt;/p&gt;

&lt;p&gt;First you create a template with tags like in Angular, for example you can set a tag &lt;code&gt;{{City}}&lt;/code&gt; in your document. In your .Net application, you create for example a Dictionary with City as key and Paris as value and it will be replaced by the corresponding value. This style will be preserved, if you set a tag in italics the new value will also be in italics.&lt;/p&gt;

&lt;p&gt;You can also send your data as a json or as an object.&lt;/p&gt;

&lt;p&gt;Then you call the OfficeExport’s functions.&lt;/p&gt;

&lt;p&gt;For information tags that do not have corresponding values will be removed.&lt;/p&gt;

&lt;p&gt;The package also allows you to handle arrays. To do this, create a basic table in Word or PowerPoint and you add a tag like this &lt;code&gt;{{Lines[i].NetIncome}}&lt;/code&gt; on a line, this has for effect to replace this line by the first value of your array and add a line for the other rows of your array.&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;The product key unlocks some features such as arrays support, but you can replace the basic tags without it.&lt;/p&gt;

&lt;p&gt;In this example OfficeExport will create a new document OutPut.docx, but you can get the result as a blob.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fewidkb3smjjd1l61hxzn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fewidkb3smjjd1l61hxzn.png" alt="A Word Template" width="800" height="381"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Become&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F343vt0h1mqu5yw9z0pob.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F343vt0h1mqu5yw9z0pob.png" alt="The output Word Document" width="800" height="386"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Please feel free to provide feedback to me at &lt;a href="mailto:contact@broggisoft.com"&gt;contact@broggisoft.com&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;You will find all the documentation on &lt;a href="https://www.broggisoft.com/" rel="noopener noreferrer"&gt;broggisoft.com&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;You can find a test project on GitHub: &lt;a href="https://github.com/BroggiQ/OfficeExportTest" rel="noopener noreferrer"&gt;OfficeExportTest&lt;/a&gt;&lt;/p&gt;

</description>
      <category>csharp</category>
      <category>dotnet</category>
      <category>programming</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
