I am working on Windows form application C# and have encountered a problem in exporting data to excel. I don't have enough knowledge about this and I don't know if it is possible. I tried searching about this and I can't seem to compose my question properly. I just want to know if this is possible and if there are documents about this.
I have a template:
Excel template:

and this is the print/output that I wanted in one paper:
Print output:

How do I achieve this?
CodePudding user response:
Take a look at following demo. I made it simple.
Create a WinForms project (in this example it's name is WindowsFormsApp3).
Create a strongly-typed data set - ProductsDataSet.
Add a new static class Extensions to the project
namespace WindowsFormsApp3
{
using Microsoft.Office.Interop.Excel;
static class Extensions
{
}
}
Insert into this class following 2 methods
First method
private static void Export(this ProductsDataSet dataSet, Worksheet worksheet)
{
var products = dataSet.Product.Select();
for (int i = 1, j = 6; i < products.Length; i , j = 5)
{
worksheet.Range["A1", "D4"].Copy(Type.Missing);
worksheet.Range[$"A{j}"].PasteSpecial(XlPasteType.xlPasteAll,
XlPasteSpecialOperation.xlPasteSpecialOperationNone,
true, Type.Missing);
}
for (int i = 0, j = 3; i < products.Length; i , j = 5)
{
worksheet.Range[$"B{j}"].Value = products[i][0];
worksheet.Range[$"C{j}"].Value = products[i][1];
}
}
Second method
public static void Export(this ProductsDataSet dataSet, string fileName)
{
Application application = new Application();
var workbook = application.Workbooks.Open(fileName,
Type.Missing,
Type.Missing,
Type.Missing,
Type.Missing,
Type.Missing,
Type.Missing,
Type.Missing,
Type.Missing,
Type.Missing,
Type.Missing,
Type.Missing,
Type.Missing,
Type.Missing,
Type.Missing
);
dataSet.Export((Worksheet)workbook.Worksheets[1]);
application.Visible = true;
}
Customize Form1 as below
Subscribe following event handler to button's click event.
private void Button1_Click(object sender, EventArgs e)
{
using (var openFileDialog = new OpenFileDialog())
{
switch (openFileDialog.ShowDialog())
{
case DialogResult.OK:
var directoryName = System.IO.Path
.GetDirectoryName(openFileDialog.FileName);
var fileName = System.IO.Path
.GetFileName(openFileDialog.FileName);
var destFileName =
$"{directoryName}\\{DateTime.Now.Ticks}.{fileName}";
System.IO.File.Copy(openFileDialog.FileName, destFileName);
productsDataSet1.Export(destFileName);
break;
}
}
}
I created following excel template file, similar to yours. The program will open this file and populate it with data from productsDataSet1.
Here is running application
Here is exported data in the excel file





