Вставка значения в Excel с помощью приложения asp.net - PullRequest
0 голосов
/ 07 декабря 2018

У меня есть электронная таблица, которая должна принимать данные из приложения asp.net.

Я написал несколько C #, которые позволяют мне читать данные из другой электронной таблицы, но теперь я хочу ввести некоторые данные из текста

        protected void Button2_Click(object sender, EventArgs e)
    {
        OleDbConnection conn = new OleDbConnection();
        string path = Server.MapPath("LOG_TEST.xlsx");
        String connString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties='Excel 12.0;IMEX=1;'";
        conn.ConnectionString = connString;
        conn.Open();
        OleDbCommand cmd = new OleDbCommand("INSERT INTO [Sheet1$] ([NAME], [MOBILE], [EMAIL]) VALUES('" + TextBox2.Text + "','" + TextBox3.Text + "','" + TextBox4.Text + "')",conn);
        OleDbDataReader rd = cmd.ExecuteReader();
        conn.Close();
    }

Просто введите 3 значения в электронную таблицу.

ошибка, которую я получаю ниже.

enter image description here

Я полагаю, что проблема заключается в

OleDbDataReader rd = cmd.ExecuteReader();

, но не уверен, что заменить его.

Ответы [ 2 ]

0 голосов
/ 07 декабря 2018

Я работаю с файлами Excel уже несколько лет, и самым простым и надежным способом для меня было использование NPOI для .NET.Он доступен в виде бесплатного пакета NuGet https://www.nuget.org/packages/NPOI/

Образец:

XSSFWorkbook wb1 = null;
using (var file = new FileStream("D:\\banding.xlsx", FileMode.Open, 
FileAccess.ReadWrite)) 
{
  wb1 = new XSSFWorkbook(file);
}

wb1.GetSheetAt(0).GetRow(0).GetCell(0).SetCellValue("Sample");

using (var file2 = new FileStream("D:\\banding2.xlsx", FileMode.Create, 
       FileAccess.ReadWrite)) {
         wb1.Write(file2);
         file2.Close();
      }

Взято из ответа Мутукришнана Рамасами на https://social.msdn.microsoft.com/Forums/vstudio/en-US/d1c5e191-135b-45c0-9f88-cc3e02849257/npoi-how-to-write-to-an-xlsx-excel-file?forum=csharpgeneral

0 голосов
/ 07 декабря 2018

Я рекомендую упростить его так же, как я сделал это ниже: Используйте электронную таблицу с вашего локального диска, C :, обновите остальную часть каталога в connString.Используйте строковые значения в INSERT QUERY, вы можете обновить его позже.Мы просто хотим быть уверены, что это работает в первую очередь!Кстати, я не тестировал этот код, но думаю, что он должен работать.

protected void Button2_Click(object sender, EventArgs e)
{
    string connString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + "C:\\SPECIFY HERE\\LOG_TEST.xlsx" + ";Extended Properties=\"Excel 12.0;ReadOnly=False;HDR=Yes;\"";

 string query ="INSERT INTO [Sheet1$] (NAME, Mobile, Emails) VALUES ('Bob', '1', 'Whatever@mail')";

 OleDbConnection con = new OleDbConnection(connString);
 OleDbCommand cmd = new OleDbCommand(query, con);

 con.Open();
 cmd.ExecuteNonQuery();


}

Я предполагаю, что вы можете написать функцию для открытия вашего файла Excel, например,

//Make sure you add these two references. 
using Microsoft.Office.Interop
using Excel = Microsoft.Office.Interop.Excel

//Call this before your insert
static void FileOpen() {
    string path = "Path.xlsx"
    var excel = new Excel.Application
    excel.Visible=True

    Excel.Workbooks books = excel.Workbooks;
    Excel.Workbook sheet = books.Open(path);
}
...