Как отредактировать содержимое ячейки файла excel (.xlsx) в C#
привет,
Я пытаюсь отредактировать некоторые детали в файле excel, но, получив исключение Runtime binder, "не могу выполнить привязку времени выполнения к нулевой ссылке".
Некоторые из манипуляций, которые я пытаюсь сделать, это:
i. переименование имени листа,
ii. замена слова "вчера" на вчерашнюю дату 01/03/2018,
iii. вставьте несколько строк, Если заголовок не находится в ожидаемой строке.
Я добавил ссылку на DLL excel и импортировал пространство имен с помощью Microsoft.Офис.Взаимодействие.Превосходить.
Ниже приведен мой код:
Может ли кто-нибудь подсказать, что я здесь делаю не так?..
Что я уже пробовал:
string folder = Path.GetDirectoryName(@"\\OpsVsAdp\\Files\\Daily\\TempHours.xlsx"); string fileName = Path.GetFileNameWithoutExtension(@"\\OpsVsAdp\\Files\\Daily\\TempHours.xlsx"); string extension = Path.GetExtension(@"\\OpsVsAdp\\Files\\Daily\\TempHours.xlsx"); FileInfo info = new FileInfo(fileName + extension); { // Rename the file as FileName_YYYYMMDD date format. string newName = folder + "\\" + fileName + "_" + ISO_Date() + extension; if (!File.Exists(newName)) { // info.MoveTo(newName); } } MyApp = new Excel.Application(); MyApp.Visible = false; xlBook = MyApp.Workbooks.Open(@"D:\\OpsVsAdp\\Files\\Daily\\TempHours.xlsx"); xlSheet = (Excel.Worksheet)xlBook.Worksheets.get_Item(1); // Explicit cast is not required here // Modify the sheet name to 'Sheet1' xlSheet.Name = "Sheet1"; xlBook.Save(); int totalRows = xlSheet.Rows.Count; int totalCols = xlSheet.Columns.Count; // replace word 'yesterday' in second row with date if(xlSheet.Cells[2, 1].Value.Contain("yesterday")) { xlSheet.Cells[2, 1].Value.Replace("yesterday", DateTime.Today.AddDays(-1)); } // if it is date range, remove the first date else if (xlSheet.Cells[2, 1].Value.Contain("-")) { int indexOf = xlSheet.Cells[2, 1].Value.IndexOf("-"); xlSheet.Cells[2, 1].Value.Remove(indexOf, -14); } Excel.Range range = (Excel.Range)xlSheet.Columns["A", Type.Missing]; Excel.Range currentFind = null; Excel.Range firstFind = null; // Name column header should start from 21st row. if(xlSheet.Cells[21, 1].Value != "Name") { currentFind = range.Find("Name", xlSheet.Cells[1, 1], Excel.XlFindLookIn.xlValues, Excel.XlLookAt.xlPart, Excel.XlSearchOrder.xlByRows, Excel.XlSearchDirection.xlNext, false, false, false); }
ZurdoDev
Шаг первый. Какая строка кода вызывает ошибку? Шаг 2. Выясните, что такое null и почему.
Samuel Corpuz
попробуйте сломать и продолжить программу, это может помочь увидеть, что такое нулевое значение и ошибка.