using Spire.Xls;
using MySql.Data.MySqlClient;
namespace ExcelToMySQL
{
class Program
{
static void Main(string[] args)
{
// Создайте объект Workbook
Workbook wb = new Workbook();
// Загрузите документ Excel
wb.LoadFromFile("C:\\Users\\Administrator\\Desktop\\Input.xlsx");
// Получите конкретный лист
Worksheet sheet = wb.Worksheets[0];
// Извлеките заголовки
List<string> headers = new List<string>();
for (int col = 1; col <= sheet.LastColumn; col++)
{
string header = sheet.Range[1, col].Value?.ToString();
// Удалите пробелы, чтобы избежать конфликтов с именами столбцов MySQL
string cleanHeader = header?.Replace(" ", "");
headers.Add($"`{cleanHeader}`");
}
// Извлеките данные
List<List<string>> data = new List<List<string>>();
for (int row = 2; row <= sheet.LastRow; row++)
{
List<string> record = new List<string>();
for (int col = 1; col <= sheet.LastColumn; col++)
{
record.Add(sheet.Range[row, col].Value?.ToString() ?? string.Empty);
}
data.Add(record);
}
// Установите соединение с базой данных MySQL
string connectionString = "server=localhost;user=root;password=admin;database=excel_db;";
using (MySqlConnection connection = new MySqlConnection(connectionString))
{
connection.Open();
// Создайте таблицу с динамическими столбцами на основе заголовков
List<string> columns = new List<string>();
foreach (string header in headers)
{
// Предполагая, что все значения заголовков являются VARCHAR для простоты; настройте типы по мере необходимости
columns.Add($"{header} VARCHAR(255)");
}
// Создайте таблицу в базе данных
string columnsSql = string.Join(", ", columns);
string createTableQuery = $@"
CREATE TABLE IF NOT EXISTS my_table (
id INT AUTO_INCREMENT PRIMARY KEY,
{columnsSql}
)";
// Выполните запрос на создание таблицы
using (MySqlCommand createCommand = new MySqlCommand(createTableQuery, connection))
{
createCommand.ExecuteNonQuery();
}
// Подготовьте SQL-запрос INSERT
string placeholders = string.Join(", ", new string[headers.Count].Select(h => "?"));
string insertQuery = $"INSERT INTO my_table ({string.Join(", ", headers.Select(h => h.Trim('`')))}) VALUES ({placeholders})";
// Вставьте данные в таблицу
foreach (List<string> record in data)
{
using (MySqlCommand insertCommand = new MySqlCommand(insertQuery, connection))
{
for (int i = 0; i < record.Count; i++)
{
insertCommand.Parameters.AddWithValue($"@Param{i}", record[i]);
}
insertCommand.ExecuteNonQuery();
}
}
}
Console.WriteLine("Данные успешно экспортированы!");
}
}
}