从Excel创建数据表并写回Excel

时间:2018-10-29 01:51:34

标签: c# excel datatable boolean xlsx

我创建了一个C#程序,该文件使用fileSystemWatcher.Monitor监视文件夹。重命名后,字符串包含“ xlsx”,防止重复通知,然后从Excel中的指定范围E6:AA:10000进行读取,并使用System.Data创建一个Datatable。 OleDb。

这非常有效,可以通过API更新和/或创建记录。我的问题是我不相信您可以写回excel文件来将某行标记为已处理,因此在文件更新时它将再次处理所有行。

由于它可能正在处理多个文件,因此创建一个索引文件有点麻烦,如果在其中一个excel文件中删除了行,则可能会破坏索引。我也不想每次更新记录时都查询每个API的API,以查看它是否存在,并且宁愿只处理新行。

对于导入excel.xlsx数据的程序,您使用什么技术来了解哪些行是新行且之前未进行过处理?

1 个答案:

答案 0 :(得分:1)

我已经能够使用EPPLUS解决此问题,在这里我可以将所有单元格读入数据表,然后写回特定行并保存excel文件,如下所示。

using System;
using OfficeOpenXml;
using System.Data;
using System.Linq;

namespace excelReadWrite
{
    class Program
    {
        static void Main(string[] args)
        {
            // Create Excel Package and set path
            ExcelPackage package = new ExcelPackage(new System.IO.FileInfo(@"D:\IDG\test2.xlsx"));
            DataTable dt = new DataTable();
            dt = ToDataTable(package);
        }
        public static DataTable ToDataTable(ExcelPackage package)
        {
            // Sets worksheet to first sheet found
            ExcelWorksheet workSheet = package.Workbook.Worksheets.First();
            DataTable table = new DataTable();
            // Iterate through first row and set Datatable columns
            foreach (var firstRowCell in workSheet.Cells[1, 1, 1, workSheet.Dimension.End.Column])
            {
                table.Columns.Add(firstRowCell.Text);
            }
            // Iterate through all rows and set values
            for (var rowNumber = 2; rowNumber <= workSheet.Dimension.End.Row; rowNumber++)
            {
                var row = workSheet.Cells[rowNumber, 1, rowNumber, workSheet.Dimension.End.Column];
               var newRow = table.NewRow();
                foreach (var cell in row)
                {
                    newRow[cell.Start.Column - 1] = cell.Value;
                }
                // Set value of every row processed last column to 1
                workSheet.Cells[rowNumber, workSheet.Dimension.End.Column].Value = 1;
                table.Rows.Add(newRow);
            }
            // Save excel file
            package.Save();
            return table;

        }

    }
}