Для этой операции нет смысла использовать автоматизацию Excel, вместо этого разумным направлением является работа с OleDb, если нет разумной причины для использования автоматизации Excel.
Пример: фигура 1 - это функция для создания строки соединения, которая может использоваться в любом проекте, в то время как цифра 2 предназначена для чтения данных.
Для работы с автоматизацией Excel мы открываем себя для объектов, которые не удаляются, если есть авария или что вы неправильно кодируете (это я называю правилом двух точек), когда объекты не могут быть освобождены из-за того, как вы создали и использовали объекты автоматизации, которые не встречаются с OleDb. Теперь, если вы хотите форматировать, чем переходите к автоматизации.
public string ConnectionString(string FileName, string Header)
{
OleDbConnectionStringBuilder Builder = new OleDbConnectionStringBuilder();
if (System.IO.Path.GetExtension(FileName).ToUpper() == ".XLS")
{
Builder.Provider = "Microsoft.Jet.OLEDB.4.0";
Builder.Add("Extended Properties", string.Format("Excel 8.0;IMEX=1;HDR={0};", Header));
}
else
{
Builder.Provider = "Microsoft.ACE.OLEDB.12.0";
Builder.Add("Extended Properties", string.Format("Excel 12.0;IMEX=1;HDR={0};", Header));
}
Builder.DataSource = FileName;
return Builder.ConnectionString;
}
код, чтобы прочитать первый столбец в Лист2 и получить различные значения, в этом случае я работаю против колонки с датами, как строки в список, где файл находится в той же папке, что и приложение исполняемые
private List<string> DemoDistinct()
{
List<string> dateList = new List<string>();
DataTable dt = new DataTable();
using (OleDbConnection cn = new OleDbConnection { ConnectionString = ConnectionString(System.IO.Path.Combine(Application.StartupPath, "WS1.xlsx"), "Yes") })
{
cn.Open();
using (OleDbCommand cmd = new OleDbCommand
{
CommandText = "SELECT DISTINCT [Dates] FROM [Sheet2$]",
Connection = cn
}
)
{
OleDbDataReader dr = cmd.ExecuteReader();
dt.Load(dr);
dateList = dt
.AsEnumerable()
.Select(row => row.Field<DateTime>("Dates").ToShortDateString()).ToList();
}
}
return dateList;
}
Большое вам спасибо за ваш ответ. Я пытаюсь с вашим Кодом. –