Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > .NET для новичков > OleDB запись в существующий Excel файл.


Автор: Nerfair 19.9.2012, 16:35
Добрый день, существует файл .xlsx с уже готовым бланком счет-фактуры (инвойса) который должен заполняться с помощью программы написанной на C#.
Первая реализация была написана мной с помощью Microsoft.Office.Interop.Excel, и там поля заполнялись очень просто через 
Код

sheet.get_Range("A1").Value = "Текст";


Позже оказалось что не на всех компьютерах где будет использоваться эта программа есть Excel (установлен OpenOffice), и приходится переписывать программу с использованием OleDB.
Все казалось бы не плохо, но я встрял на моменте записи данных в фиксированную ячейку (допустим D14).

Пробовал через
Код

MyConnection.Open();
                myCommand.Connection = MyConnection;
                string sql = "INSERT INTO [Sheet1$] (F1) values ('111')";
                myCommand.CommandText = sql;
                myCommand.ExecuteNonQuery();

и 
Код

MyConnection.Open();
                myCommand.Connection = MyConnection;
                string sql = "INSERT INTO [Sheet1$] (Users) values ('111')";
                myCommand.CommandText = sql;
                myCommand.ExecuteNonQuery();


Но это все не то, ибо пишет в первую не заполненную ячейку столбца.
Как быть?

---

Update:

Значения в нужных ячейках получилось обновлять через 
Код


                MyConnection.Open();
                myCommand = new OleDbCommand("UPDATE [Sheet1$B6:B6] SET F1=123456", MyConnection);
                myCommand.ExecuteNonQuery();
                MyConnection.Close();


А как делать Save as?
Есть идея перед редактированием копировать файл, копию редактировать и после переносить в нужную папку.

---

Код


                int unixTime = (int)(DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalSeconds;
                string filePath = Path.GetDirectoryName(Application.ExecutablePath) + "\\invoice.xls";
                string newPath = filePath.Remove(filePath.Trim().Length - 11) + "Invoice." + unixTime + ".xls";

Сделано  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)