Стала появляться следующая ошибка после переустановки с win7 на win10 :
в EDIService1CConvert.Watcher.ConvertTxtToExcel() в C:\Users\выаы\source\repos\EDIService1CConvert\EDIService1CConvert\Watcher.cs:строка 138, имя метода - ConvertTxtToExcel [15.05.2018 10:24:35.370] [Microsoft.Office.Interop.Excel.Workbooks.Add()] System.Runtime.InteropServices.COMException (0x800A03EC): Приложению Microsoft Excel не удается открыть или сохранить документы из-за нехватки памяти или места на диске.
• Чтобы освободить память, закройте ненужные книги или программы.
• Чтобы освободить место на диске, удалите с этого диска ненужные файлы. в Microsoft.Office.Interop.Excel.Workbooks.Add(Object Template)
Конверт происходит на диск D.
Вот код метода:
private void ConvertTxtToExcel()
{
Application excelApp = null;
Worksheet workSheet = null;
try
{
//Список файлов
string[] files = Directory.GetFiles(pathToTxt);
if (files.Length >= 1)
{
//Получаем самый свежий
string file = files.OrderByDescending(x => File.GetCreationTime(x)).First();
//Колво строк в txt
var lines = File.ReadAllLines(file, Encoding.Default);
//Проверка на колво столбцов в файле
int checkFileFormat = lines[0].Split('\t').Length;
if (checkFileFormat == 5)
{
//excel app
excelApp = new Application();
//Путь к excel файлу
string pathToXlsFile = String.Concat(pathToTxt, paths[0], @"MANPriceResult.xls");
//Проверка на существоаания, прайс всегда должен быть один
if (File.Exists(pathToXlsFile))
{
string path = String.Format("{0}{1}MANPriceResult_{2:dd_MM_yyy_HH_mm_ss_ff}.xls", pathToTxt, paths[1], DateTime.Now);
File.Move(pathToXlsFile, path);
}
//Настройка книги
excelApp.Workbooks.Add();
workSheet = (Worksheet)excelApp.ActiveSheet;
workSheet.Cells[1, 1] = "ID";
workSheet.Cells[1, 2] = "Catalog";
workSheet.Cells[1, 3] = "Code";
workSheet.Cells[1, 4] = "PartName";
workSheet.Cells[1, 5] = "Price";
workSheet.Cells[1, 6] = "Percent";
int row = 1;
Log.Write(null, "Старт создания файла, ожидайте..");
int temp = 0;
foreach (var line in lines)
{
//Вычисляем процент выполнения для файла с логами
int resultPercent = row * 100 / lines.Length;
if (resultPercent % 10 == 0 && resultPercent != temp)
{
temp = resultPercent;
Log.Write(null, String.Format("Завершено {0}%, пройдено {1} строк.", resultPercent, row));
}
if (row > 1)
{
//Разделения столбцов в txt по символу табуляции
var values = line.Split('\t');
for (int i = 0; i < values.Length; i++)
{
//заполняем строку
workSheet.Cells[row, i + 1] = values[i];
//Парсим процент скидки из поля с наименованием
if(i == 3)
{
if(values[i].Contains("ЗНИЖКА"))
{
string result = "";
foreach (var item in values[i].ToCharArray())
{
if(Char.IsDigit(item))
{
result += item;
}
}
workSheet.Cells[row, 6] = result;
}
}
}
}
row++;
}
workSheet.SaveAs(pathToXlsFile);
excelApp.Workbooks.Close();
excelApp.Quit();
//Оповещаем об успешном создании нового файла
Log.Write(null, String.Format("Файл {0} успешно создан", pathToXlsFile));
Attachment attachment = new Attachment(pathToXlsFile);
email.sendEmailLetter("Поступил новый файл", "Поступил новый файл на сервер. Проект EDI.", attachment);
//Обунляем попытки
countTries = 0;
//Архивируем текстовые файлы
foreach (var item in files)
{
string path = String.Format("{0}{1}TXTBackLog_{2:dd_MM_yyy_HH_mm_ss_ff}.txt", pathToTxt, paths[2], DateTime.Now);
File.Move(item, path);
}
}
else
{
throw new Exception("Ошибка формата файла");
}
}
}
catch (Exception ex)
{
Log.Write(ex, "ConvertTxtToExcel");
if (countTries == 0)
email.sendEmailLetter("Ошибка конвертации", String.Format("Ошибка с получением файла MANPrice. Посмотрите логи по адресу {0}Logs", pathToTxt),null,true);
//Если ошибка связана с занятостью файла, повторяем попытку через 3 секунды, всего попыток 3.
if (ex is IOException)
{
if(countTries < 3)
{
countTries++;
Log.Write(null, "В связи с ошибкой доступа, повторяем попытку. Попытка номер - " + countTries);
Thread.Sleep(3000);
ConvertTxtToExcel();
}
}
}
finally
{
GC.Collect();
GC.WaitForPendingFinalizers();
if (workSheet != null) Marshal.ReleaseComObject(workSheet);
if (excelApp != null) Marshal.ReleaseComObject(excelApp);
}
}
С чем может быть связана ошибка?
Сборка персонального компьютера от Artline: умный выбор для современных пользователей