Не открывает файл после создания

SlipDez

Client
Регистрация
18.07.2018
Сообщения
374
Благодарностей
70
Баллы
28
Сам код

Сам код:
string date = DateTime.Now.ToString("dd_MM_yyyy");
project.SendInfoToLog(date);

string path = project.Directory + "\\" +date + ".xlsx";
project.SendInfoToLog(path);

if (System.IO.File.Exists(path)){
    System.IO.File.Delete(path);
}
    else {
System.IO.File.Create(project.Directory + "\\" + date + ".xlsx");
}


var result = project.Tables["result"];
var tmp = project.Tables["tmp"];
List <string> tmp_list = new List <string>();

for (int a = 0; a<result.RowCount; a++){
    string status = result.GetCell("K",a);
    string nomer =  result.GetCell("C",a);
        if (Regex.IsMatch(status,"Готов")){
            if (tmp_list.Contains(nomer)){}
            else {
                string fio = (result.GetCell("B",a)).ToString();
                string adress = (result.GetCell("I",a)).ToString();
                tmp.AddRow(new []{fio,nomer.ToString(),adress,status.ToString()});
                tmp_list.Add(nomer);
            }
           
                   
            }                      
               
    }

95539

95540


Если открыть файл tmp показывает это
95541


но после нажатия кнопку "Просмотр содержимого" показывает уже готовую таблицу
 

Sherminator

Client
Регистрация
10.09.2021
Сообщения
1 020
Благодарностей
542
Баллы
113
Сам код

Сам код:
string date = DateTime.Now.ToString("dd_MM_yyyy");
project.SendInfoToLog(date);

string path = project.Directory + "\\" +date + ".xlsx";
project.SendInfoToLog(path);

if (System.IO.File.Exists(path)){
    System.IO.File.Delete(path);
}
    else {
System.IO.File.Create(project.Directory + "\\" + date + ".xlsx");
}


var result = project.Tables["result"];
var tmp = project.Tables["tmp"];
List <string> tmp_list = new List <string>();

for (int a = 0; a<result.RowCount; a++){
    string status = result.GetCell("K",a);
    string nomer =  result.GetCell("C",a);
        if (Regex.IsMatch(status,"Готов")){
            if (tmp_list.Contains(nomer)){}
            else {
                string fio = (result.GetCell("B",a)).ToString();
                string adress = (result.GetCell("I",a)).ToString();
                tmp.AddRow(new []{fio,nomer.ToString(),adress,status.ToString()});
                tmp_list.Add(nomer);
            }
        
                
            }                   
            
    }

Посмотреть вложение 95539
Посмотреть вложение 95540

Если открыть файл tmp показывает это Посмотреть вложение 95541

но после нажатия кнопку "Просмотр содержимого" показывает уже готовую таблицу
Вот так попробуй

C#:
string date = DateTime.Now.ToString("dd_MM_yyyy");
project.SendInfoToLog(date);

string path = project.Directory + "\\" +date + ".xlsx";
project.SendInfoToLog(path);

if (System.IO.File.Exists(path)){
    System.IO.File.Delete(path);
}
    else {
using(System.IO.File.Create(project.Directory + "\\" + date + ".xlsx")){}
}


var result = project.Tables["result"];
var tmp = project.Tables["tmp"];
List <string> tmp_list = new List <string>();

for (int a = 0; a<result.RowCount; a++){
    string status = result.GetCell("K",a);
    string nomer =  result.GetCell("C",a);
        if (Regex.IsMatch(status,"Готов")){
            if (tmp_list.Contains(nomer)){}
            else {
                string fio = (result.GetCell("B",a)).ToString();
                string adress = (result.GetCell("I",a)).ToString();
                tmp.AddRow(new []{fio,nomer.ToString(),adress,status.ToString()});
                tmp_list.Add(nomer);
            }
        
                
            }                   
            
    }
 
Последнее редактирование:

SlipDez

Client
Регистрация
18.07.2018
Сообщения
374
Благодарностей
70
Баллы
28

Sherminator

Client
Регистрация
10.09.2021
Сообщения
1 020
Благодарностей
542
Баллы
113

SlipDez

Client
Регистрация
18.07.2018
Сообщения
374
Благодарностей
70
Баллы
28

Sherminator

Client
Регистрация
10.09.2021
Сообщения
1 020
Благодарностей
542
Баллы
113
Крч изучил вопрос, нельзя просто так взять и создать эксель файл, т.к в коде создается вообще пустой файл, а если руками делать файл xlsx то там данные будут. Для создания эксель таблицы надо использовать библиотеку специальную для работы с экселем
 

Sherminator

Client
Регистрация
10.09.2021
Сообщения
1 020
Благодарностей
542
Баллы
113
D
Вот библа
Вот юсинг
C#:
using Excel = Microsoft.Office.Interop.Excel;
Вот код для создания файла

C#:
Excel.Application ObjWorkExcel = new Excel.Application();
Excel.Workbook ObjWorkBook = ObjWorkExcel.Workbooks.Add();  
ObjWorkBook.SaveAs(project.Directory + @"\123224.xlsx");
ObjWorkBook.Close();
 
Последнее редактирование:
  • Спасибо
Реакции: SlipDez

SlipDez

Client
Регистрация
18.07.2018
Сообщения
374
Благодарностей
70
Баллы
28
Крч изучил вопрос, нельзя просто так взять и создать эксель файл, т.к в коде создается вообще пустой файл, а если руками делать файл xlsx то там данные будут. Для создания эксель таблицы надо использовать библиотеку специальную для работы с экселем
Читал решения но подключать библиотеку ту же epuls для создания xlsx считаю слишком, нашел +- решение но почему-то создается файл excel 199*-2003, сейчас пытаюсь найти то сообщение и не вижу
 

Sherminator

Client
Регистрация
10.09.2021
Сообщения
1 020
Благодарностей
542
Баллы
113
Читал решения но подключать библиотеку ту же epuls для создания xlsx считаю слишком, нашел +- решение но почему-то создается файл excel 199*-2003, сейчас пытаюсь найти то сообщение и не вижу
Без танцев с бубном и библиотек можно создать файл csv который будет открываться экселем как обычная таблица

C#:
            using (var sw = new StreamWriter(project.Directory + @"\123224.csv", false, Encoding.UTF8))
            {
                sw.WriteLine("Ячейка1;Ячейка2;Ячейка3");
                sw.WriteLine("Ячейка1-1;Ячейка1-2;Ячейка1-3");
                sw.WriteLine("Ячейка2-1;Ячейка2-2;Ячейка2-3");
            }
 
  • Спасибо
Реакции: SlipDez

SlipDez

Client
Регистрация
18.07.2018
Сообщения
374
Благодарностей
70
Баллы
28
95544

D


Вот библа
Вот юсинг
C#:
using Excel = Microsoft.Office.Interop.Excel;
Вот код для создания файла

C#:
Excel.Application ObjWorkExcel = new Excel.Application();
Excel.Workbook ObjWorkBook = ObjWorkExcel.Workbooks.Add(); 
ObjWorkBook.SaveAs(project.Directory + @"\123224.xlsx");
ObjWorkBook.Close();
После выполнения кода, если нажать уведомить то открывается пустой xlsx
 

Sherminator

Client
Регистрация
10.09.2021
Сообщения
1 020
Благодарностей
542
Баллы
113
  • Спасибо
Реакции: SlipDez

SlipDez

Client
Регистрация
18.07.2018
Сообщения
374
Благодарностей
70
Баллы
28
Ничего не понятно но очень интересно, добавил ссылки на либу, добавил в using и вауля все работает. Но думаю лучше либо epuls тогда подключать либо кубик один использовать, за ответы признателен)
 

Sherminator

Client
Регистрация
10.09.2021
Сообщения
1 020
Благодарностей
542
Баллы
113
Ничего не понятно но очень интересно, добавил ссылки на либу, добавил в using и вауля все работает. Но думаю лучше либо epuls тогда подключать либо кубик один использовать, за ответы признателен)
Ну суть в том, что когда происходит работа с файлом открывается так называемый Stream (поток) и программа в нем работает с файлом, в итоге если после работы с файлом не закрыть поток, то будет как на скрине выше, написано что файл занят. Для того что бы такого не было, поток после работы с файлом надо закрывать, в данном коде эту роль выполняет вот эта строчка

C#:
ObjWorkBook.Close();
C#:
Excel.Application ObjWorkExcel = new Excel.Application();
Excel.Workbook ObjWorkBook = ObjWorkExcel.Workbooks.Add();
ObjWorkBook.SaveAs(project.Directory + @"\123224.xlsx");
ObjWorkBook.Close();
 

Sherminator

Client
Регистрация
10.09.2021
Сообщения
1 020
Благодарностей
542
Баллы
113
Ничего не понятно но очень интересно, добавил ссылки на либу, добавил в using и вауля все работает. Но думаю лучше либо epuls тогда подключать либо кубик один использовать, за ответы признателен)
Вот пример кода с созданием файла и добавлением в него данных.

C#:
            Excel.Application ObjWorkExcel = new Excel.Application();
            Excel.Workbook ObjWorkBook = ObjWorkExcel.Workbooks.Add();
            Excel.Worksheet worksheet = ObjWorkBook.Worksheets.Add();
            ObjWorkBook.SaveAs(project.Directory + @"\123224.xlsx"); //Создали файл
            worksheet.Cells[1, "A"] = "ТЕКСТ1"; //записали данные в первую ячейку первого столбца
            worksheet.Cells[1, "B"] = "ТЕКСТ2"; //записали данные в первую ячейку второго столбца
            ObjWorkBook.Save(); //Сохранили всё это дело.
            ObjWorkBook.Close(); //Закрыли поток.
 

SlipDez

Client
Регистрация
18.07.2018
Сообщения
374
Благодарностей
70
Баллы
28
Вот пример кода с созданием файла и добавлением в него данных.

C#:
            Excel.Application ObjWorkExcel = new Excel.Application();
            Excel.Workbook ObjWorkBook = ObjWorkExcel.Workbooks.Add();
            Excel.Worksheet worksheet = ObjWorkBook.Worksheets.Add();
            ObjWorkBook.SaveAs(project.Directory + @"\123224.xlsx"); //Создали файл
            worksheet.Cells[1, "A"] = "ТЕКСТ1"; //записали данные в первую ячейку первого столбца
            worksheet.Cells[1, "B"] = "ТЕКСТ2"; //записали данные в первую ячейку второго столбца
            ObjWorkBook.Save(); //Сохранили всё это дело.
            ObjWorkBook.Close(); //Закрыли поток.
на самом деле интересное решение. А нумерация разве не с 0 начинается?
 

Sherminator

Client
Регистрация
10.09.2021
Сообщения
1 020
Благодарностей
542
Баллы
113
  • Спасибо
Реакции: SlipDez

Yuriy Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
6 379
Благодарностей
3 303
Баллы
113

SlipDez

Client
Регистрация
18.07.2018
Сообщения
374
Благодарностей
70
Баллы
28
Пустой xlsx файл не является пустым физически. Сделайте заготовку и используйте её.
Вы имеете ввиду сделать заготовку, а при работе копировать заготовку и работать с ней?
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)