将数据从CSV填充到C#中的现有Excel模板

苏里亚基兰

我有一个要求,我们要有带标题和某些格式的预定义Excel模板。通过代码,我们应该能够从CSV文件映射数据并将数据填充到模板中,最后将excel保存为新文件,从而不会干扰模板。

我可以提出一个想法或一些示例代码片段来继续吗?

苏里亚基兰

以下是对我有用的代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Excel = Microsoft.Office.Interop.Excel;
using System.Reflection;
using System.Data;
using System.IO;
using System.Data.OleDb;
using System.Globalization;

namespace ExcelTemplateFiller
{
    class Program
    {
        static void Main(string[] args)
        {
            Excel.Application excelApp = null;
            Excel.Worksheet xlSheet;
            Excel.Workbook xlBook;
            try
            {
                excelApp = new Excel.Application();
                string templatePath = @"..\..\ExcelTemplate\FTPLogReport.xltx";
                string CSVPath = @"..\..\Input\08Oct2013_FTPLogReport.csv";
                string OutputPath = @"..\..\Output\08Oct2013_FTPLogReport.xlsx";

                templatePath = Path.GetFullPath(templatePath);
                CSVPath = Path.GetFullPath(CSVPath);
                OutputPath = Path.GetFullPath(OutputPath);

                xlBook = (Excel.Workbook)excelApp.Workbooks.Open(templatePath, Missing.Value, Missing.Value,
                    Missing.Value, Missing.Value,
                    Missing.Value, Missing.Value,
                    Missing.Value, Missing.Value,
                    Missing.Value, Missing.Value,
                    Missing.Value, Missing.Value,
                    Missing.Value, Missing.Value);

                int row = 2;

                DataTable dtCSV = CsvFileToDatatable(CSVPath, true);

                foreach (DataRow dr in dtCSV.Rows)
                {
                    excelApp.Cells[row, 1] = dr[0].ToString();
                    excelApp.Cells[row, 2] = dr[1].ToString();
                    excelApp.Cells[row, 3] = dr[2].ToString();
                    excelApp.Cells[row, 4] = dr[3].ToString();
                    excelApp.Cells[row, 5] = dr[4].ToString();

                    row++;
                }



                xlSheet = (Excel.Worksheet)xlBook.Worksheets.get_Item(1);
                xlSheet.Name = "08Oct2013";

                object oFilename = OutputPath;
                object oFileFormat = Excel.XlFileFormat.xlWorkbookDefault;
                object oPassword = Missing.Value;
                object oWriteResPassword = Missing.Value;
                object oReadOnlyRecommended = false;
                object oCreateBackup = false;

                Excel.XlSaveAsAccessMode AccessMode = Excel.XlSaveAsAccessMode.xlNoChange;
                object oConflictResolution = false;
                object oAddToMru = true;
                object oTextCodepage = Missing.Value;
                object oTextVisualLayout = Missing.Value;
                object oSaveChanges = true;
                object oRouteWorkbook = Missing.Value;

                excelApp.DisplayAlerts = false;
                xlBook.SaveAs(oFilename, oFileFormat, oPassword, oWriteResPassword, oReadOnlyRecommended, oCreateBackup, AccessMode, oConflictResolution, oAddToMru, oTextCodepage, oTextVisualLayout);
                xlBook.Close(oSaveChanges, oFilename, oRouteWorkbook);
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                System.Threading.Thread.Sleep(1000);
                excelApp.Quit();
                System.Runtime.InteropServices.Marshal.ReleaseComObject(excelApp);
                GC.Collect();
                GC.WaitForPendingFinalizers();
                System.Threading.Thread.Sleep(30000);
            }

        }

        private static DataTable CsvFileToDatatable(string path, bool IsFirstRowHeader)
        {
            string header = "No";
            string sql = string.Empty;
            DataTable dtCSV = null;
            string pathOnly = string.Empty;
            string fileName = string.Empty;

            try
            {
                pathOnly = Path.GetDirectoryName(path);
                fileName = Path.GetFileName(path);

                sql = @"SELECT * FROM [" + fileName + "]";

                if (IsFirstRowHeader)
                {
                    header = "Yes";
                }

                using (OleDbConnection connection = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + pathOnly + ";Extended Properties=\"Text;HDR=" + header + "\""))
                {
                    using (OleDbCommand cmd = new OleDbCommand(sql, connection))
                    {
                        using (OleDbDataAdapter adapter = new OleDbDataAdapter(cmd))
                        {
                            dtCSV = new DataTable();
                            dtCSV.Locale = CultureInfo.CurrentCulture;
                            adapter.Fill(dtCSV);
                        }
                    }

                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return dtCSV;
        }
    }
}

下面的链接帮助我。MSDN链接

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将零填充到列表中所有数据帧中的一列

来自分类Dev

从数据框中提取值并将其填充到R中的模板短语中

来自分类Dev

在Visual Studio C#中写入现有的CSV或Excel文件

来自分类Dev

如何使用C#将Datagridview添加到现有的Excel文件中

来自分类Dev

如何使用C#将Datagridview添加到现有的Excel文件中

来自分类Dev

如何将数据填充到Json模板

来自分类Dev

如何将Excel数据插入C#中的现有表

来自分类Dev

将分组的对象填充到扩展的数据框中

来自分类Dev

将现有的和已填充的Julia数据框写入CSV输出时出错

来自分类Dev

如何在C ++ 03中将数据立即填充到没有temp变量的容器中

来自分类Dev

将数据插入C#中的现有JSON数组

来自分类Dev

尝试将JSON数据填充到ListView中

来自分类Dev

将多个数据填充到android listview中

来自分类Dev

XSLT-将数据动态填充到输入的值中

来自分类Dev

如何在现有excel模板中的aspose单元上打开excel工作表并使用c#使用asp.net在现有excel模板上编写新的excel工作表

来自分类Dev

Vaadin 7:将新数据动态填充到Table中

来自分类Dev

将数据从JSON填充到微调器中时出错

来自分类Dev

将数组中的数据填充到html表中

来自分类Dev

如何使用ArrayList将JSON数据填充到ListView中

来自分类Dev

将JSON列表填充到C#对象

来自分类Dev

如何使用C#将Datagridview添加到现有的Excel文件中

来自分类Dev

自动将数据填充到excel文件中

来自分类Dev

将数据填充到我所有的跨度中

来自分类Dev

无法将数据填充到javafx中的TableView

来自分类Dev

如何有效地将数据异步异步地填充到winform DataGridView中?

来自分类Dev

如何将数据从 CSV 文件自动填充到 PostgreSQL?

来自分类Dev

将数据填充到 DataTable 中的特定单元格 -C#

来自分类Dev

如何将现有文件中的数据放入多维数组 C#

来自分类Dev

使用现有字段值和 C# 函数在 SQLite 数据库中填充新字段

Related 相关文章

  1. 1

    将零填充到列表中所有数据帧中的一列

  2. 2

    从数据框中提取值并将其填充到R中的模板短语中

  3. 3

    在Visual Studio C#中写入现有的CSV或Excel文件

  4. 4

    如何使用C#将Datagridview添加到现有的Excel文件中

  5. 5

    如何使用C#将Datagridview添加到现有的Excel文件中

  6. 6

    如何将数据填充到Json模板

  7. 7

    如何将Excel数据插入C#中的现有表

  8. 8

    将分组的对象填充到扩展的数据框中

  9. 9

    将现有的和已填充的Julia数据框写入CSV输出时出错

  10. 10

    如何在C ++ 03中将数据立即填充到没有temp变量的容器中

  11. 11

    将数据插入C#中的现有JSON数组

  12. 12

    尝试将JSON数据填充到ListView中

  13. 13

    将多个数据填充到android listview中

  14. 14

    XSLT-将数据动态填充到输入的值中

  15. 15

    如何在现有excel模板中的aspose单元上打开excel工作表并使用c#使用asp.net在现有excel模板上编写新的excel工作表

  16. 16

    Vaadin 7:将新数据动态填充到Table中

  17. 17

    将数据从JSON填充到微调器中时出错

  18. 18

    将数组中的数据填充到html表中

  19. 19

    如何使用ArrayList将JSON数据填充到ListView中

  20. 20

    将JSON列表填充到C#对象

  21. 21

    如何使用C#将Datagridview添加到现有的Excel文件中

  22. 22

    自动将数据填充到excel文件中

  23. 23

    将数据填充到我所有的跨度中

  24. 24

    无法将数据填充到javafx中的TableView

  25. 25

    如何有效地将数据异步异步地填充到winform DataGridView中?

  26. 26

    如何将数据从 CSV 文件自动填充到 PostgreSQL?

  27. 27

    将数据填充到 DataTable 中的特定单元格 -C#

  28. 28

    如何将现有文件中的数据放入多维数组 C#

  29. 29

    使用现有字段值和 C# 函数在 SQLite 数据库中填充新字段

热门标签

归档