Srilekha Bolamoni Ответов: 3

Как читать определенные столбцы данных excel в приложении C# windows и хранить их в базе данных SQL


Здесь я хочу получить только определенные столбцы данных из excel(.csv), где у меня есть 60 столбцов и 20 строк, из которых мне нужно извлечь 6 столбцов и сохранить их в базе данных sql с помощью приложения c# windows.

Что я уже пробовал:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
using System.Data.SqlClient;
using System.Runtime.InteropServices;
using ExcelApp = Microsoft.Office.Interop.Excel;


namespace WindowsFormsApplication2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

        }

        private void button1_Click(object sender, EventArgs e)
        {

            ExcelApp.Application excelApp = new ExcelApp.Application();

            if (excelApp == null)
            {
                Console.WriteLine("Excel is not installed!!");
                return;
            }

            ExcelApp.Workbook excelBook = excelApp.Workbooks.Open("filepath");
            ExcelApp._Worksheet excelSheet = excelBook.Sheets[1];
            ExcelApp.Range excelRange = excelSheet.Columns[1];
            ExcelApp.Range excelRange1 = excelSheet.Columns[3];
            ExcelApp.Range excelRange2 = excelSheet.Columns[4];
            ExcelApp.Range excelRange3 = excelSheet.Columns[6];
            ExcelApp.Range excelRange4 = excelSheet.Columns[7];
            ExcelApp.Range excelRange5 = excelSheet.Columns[28];
            ExcelApp.Range findRange;
            string strToFind = "DealerID";
            string strToFind1 = "StockNo";
            string strToFind2 = "VIN";
            string strToFind3 = "Make";
            string strToFind4 = "Model";
            string strToFind5 = "DealerName";


            string valueInColumnA1;
            string valueInColumnC1;
            string valueInColumnD1;
            string valueInColumnF1;
            string valueInColumnG1;
            string valueInColumnAB1;

            findRange = excelRange.Find(strToFind);
            findRange = excelRange1.Find(strToFind1);
            findRange = excelRange2.Find(strToFind2);
            findRange = excelRange3.Find(strToFind3);
            findRange = excelRange4.Find(strToFind4);
            findRange = excelRange5.Find(strToFind5);

            if (findRange == null)
            {
                MessageBox.Show("Do not find value " + strToFind + "in Column A1");

            }
            else
            {
                valueInColumnA1 = excelSheet.Cells[findRange.Column,1].VALUE;
                valueInColumnC1 = excelSheet.Cells[findRange.Column,3].VALUE;
                valueInColumnD1 = excelSheet.Cells[findRange.Column,4].VALUE;
                valueInColumnF1 = excelSheet.Cells[findRange.Column,6].VALUE;
                valueInColumnG1 = excelSheet.Cells[findRange.Column,7].VALUE;
                valueInColumnAB1 = excelSheet.Cells[findRange.Column,28].VALUE;
                MessageBox.Show(strToFind + " is in A1" + findRange.Column + "\n"
                     + "Value in Column A1 is :" + valueInColumnA1 + "\n"
                    + "Value in Column C1 is :" + valueInColumnC1 + "\n"
            + "Value in Column D1 is :" + valueInColumnD1 + "\n"
                 + "Value in Column F1 is :" + valueInColumnF1 + "\n"
                  + "Value in Column G1 is :" + valueInColumnG1 + "\n"
                + "Value in Column AB1 is :" + valueInColumnAB1);
            }

        }
    }
}

До сих пор я пытался это сделать.
заранее спасибо.

Richard MacCutchan

В чем же вопрос?

Srilekha Bolamoni

просто я хочу получить определенные данные столбцов из excel(у меня есть данные в файле excel.csv из 60 столбцов и 20 строк) в c# с помощью приложения windows, пожалуйста, помогите мне, если вы можете, потому что я новичок начал учиться самостоятельно, приближаясь к веб-сайтам.
Заранее спасибо

Richard MacCutchan

Мы не сможем помочь вам, пока вы не скажете нам, в чем проблема.

Srilekha Bolamoni

Я не могу извлечь определенные столбцы данных, но могу прочитать все данные(не по приведенному выше коду, я написал его по-другому, чтобы прочитать это) из 60 столбцов и 20 строк, но я хочу прочитать только 6 конкретных столбцов и 20 строк в c#

CHill60

Где находится код, который вы используете, чтобы попытаться сохранить его в базе данных?
В чем заключается ваша реальная проблема?

Srilekha Bolamoni

На самом деле я начинаю учиться самостоятельно, во-первых, я не могу получить определенные данные столбца, а затем только я могу сохранить их в базе данных правильно.

CHill60

Простите, что не понял вашего замечания.
У вас есть некоторые данные из excel - по крайней мере, похоже, что это то, что делает ваш код.
Я думаю, вы хотите сохранить его в базе данных. Но вы не показали нам свой код и не сказали в чем проблема

Srilekha Bolamoni

На самом деле я могу читать файл excel, который состоит из 60 столбцов и 20 строк, но я хочу прочитать только 6 конкретных столбцов из этого и 20 строк(и приведенный выше код написан для этого, но он так не работает).

Richard MacCutchan

Смотрите мое решение ниже.

Srilekha Bolamoni

Игнорируйте, как сохранить его в базе данных, но сначала дайте мне несколько советов, чтобы извлечь определенные столбцы из Excel в приложении c# windows, я пробовал то же самое в приведенном выше коде, но это не работает.Я дал путь к файлу, и из него я хочу прочитать некоторые столбцы(то есть только 6 столбцов из 60 столбцов)

3 Ответов

Рейтинг:
4

Srilekha Bolamoni

Am answering my own question
It may helpful to someone. 
 
  public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
string csv_file_path = "Give your filepath here";
DataTable csvData = GetDataTabletFromCSVFile(csv_file_path);
DataView dv = new DataView(csvData);
DataTable dt = dv.ToTable(false, "ColumnName");//which particular columns you want to read
SqlConnectionStringBuilder csb = new SqlConnectionStringBuilder();
csb.DataSource = ".";
csb.InitialCatalog = "Project";
csb.IntegratedSecurity = true;
string connString = csb.ToString();
using (SqlConnection con = new SqlConnection(connString))
{
using (SqlBulkCopy sqlBulkCopy = new SqlBulkCopy(con))
{
sqlBulkCopy.DestinationTableName = "db TableName";
sqlBulkCopy.ColumnMappings.Add("Dealer ID", "DealerID");
sqlBulkCopy.ColumnMappings.Add("Stock", "StockNo");
sqlBulkCopy.ColumnMappings.Add("VIN", "VIN");
sqlBulkCopy.ColumnMappings.Add("Make", "Make");
sqlBulkCopy.ColumnMappings.Add("Model", "Model");
sqlBulkCopy.ColumnMappings.Add("Dealer Name", "DealerName");
con.Open();
sqlBulkCopy.WriteToServer(dt);
con.Close();
}
}
}
private static DataTable GetDataTabletFromCSVFile(string csv_file_path)
{
DataTable csvData = new DataTable();
try
{
using (TextFieldParser csvReader = new TextFieldParser(csv_file_path))
{
csvReader.SetDelimiters(new string[] { "," });
csvReader.HasFieldsEnclosedInQuotes = true;
string[] colFields = csvReader.ReadFields();
foreach (string column in colFields)
{
DataColumn dtcolumn = new DataColumn(column);
dtcolumn.AllowDBNull = true;
csvData.Columns.Add(dtcolumn);
}
while (!csvReader.EndOfData)
{
string[] fieldData = csvReader.ReadFields();
for (int i = 0; i < fieldData.Length; i++)
{
if (fieldData[i] == "")
{
fieldData[i] = null;
}
}
csvData.Rows.Add(fieldData);

}
}

}
catch (Exception)
{
throw;
}
return csvData;

}
}
}

 
Thanks
Srilekha Bolamoni.
Please accept it as an answer if it helps you.


Member 14689057

Большое вам спасибо, Шрилеха Боламон, ваш код мне очень помог

Рейтинг:
1

Richard MacCutchan

Ваш код неверен в ряде мест. Вы устанавливаете findRange шесть раз, поэтому он всегда будет содержать самый последний элемент. Было бы проще написать цикл для каждой строки и выбрать записи столбцов из каждой строки. Что-то вроде:

for (int row = 0; ; ++row)
{
    string field1 = workSheet.Cells[row, 1].Value as string;
    if (string.IsNullOrEmpty(field1))
        break;      // no more entries
    string field3 = workSheet.Cells[row, 3].Value as string;
    string field4 = workSheet.Cells[row, 4].Value as string;
    string field6 = workSheet.Cells[row, 6].Value as string;
    string field7 = workSheet.Cells[row, 7].Value as string;
    string field28 = workSheet.Cells[row, 28].Value as string;
//
// add fields to the database here
//
}


Maciej Los

5ed!

Srilekha Bolamoni

Я не понял, можете ли вы дать четкое представление.

Richard MacCutchan

Не знаю, что еще я могу сказать. Приведенный выше код извлечет нужные поля из листа Excel. Вам просто нужно добавить код (где я предлагаю) для оператора SQL INSERT.

Рейтинг:
0

CHill60

Цитата:
Игнорируйте, как сохранить его в базе данных, но сначала дайте мне несколько советов, чтобы извлечь определенные столбцы из Excel в приложении c# windows
Вот несколько статей, которые покажут вам, как это сделать
Работа с Excel с помощью языка Си#[^]
Чтение Excel Из C#[^]
Чтение файла Excel на языке C# (пример)[^]


Maciej Los

5ed!

Srilekha Bolamoni

Я проверил все эти статьи, но из них мы можем прочитать полные данные, но я хочу, чтобы читались конкретные столбцы.