Establishes the foundational structure, core Excel functionality, and tooling. - Implements base components for cells, ranges, columns, and rows. - Integrates a custom calculation engine with a wide range of Excel functions. - Adds comprehensive support for styling, conditional formatting, data validation, comments, pictures, and charts. - Configures build setup, project metadata (NuGet), and developer guidelines. - Includes editor and Git attributes for consistent code style and line endings.
121 lines
4.6 KiB
C#
121 lines
4.6 KiB
C#
#if !APPVEYOR && _NETFRAMEWORK_
|
|
using ClosedXML.Excel;
|
|
using ClosedXML_Tests.Utils;
|
|
using NUnit.Framework;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Data;
|
|
using System.Data.OleDb;
|
|
using System.IO;
|
|
using System.Linq;
|
|
|
|
namespace ClosedXML_Tests.OleDb
|
|
{
|
|
[TestFixture]
|
|
public class OleDbTests
|
|
{
|
|
[Test]
|
|
public void TestOleDbValues()
|
|
{
|
|
using (var tf = new TemporaryFile(CreateTestFile()))
|
|
{
|
|
Console.Write("Using temporary file\t{0}", tf.Path);
|
|
var connectionString = string.Format(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties='Excel 12.0 Xml;HDR=YES;IMEX=1';", tf.Path);
|
|
using (var connection = new OleDbConnection(connectionString))
|
|
{
|
|
// Install driver from https://www.microsoft.com/en-za/download/details.aspx?id=13255 if required
|
|
// Also check that test runner is running under correct architecture:
|
|
connection.Open();
|
|
using (var command = new OleDbCommand("select * from [Sheet1$]", connection))
|
|
using (var dataAdapter = new OleDbDataAdapter())
|
|
{
|
|
dataAdapter.SelectCommand = command;
|
|
var dt = new DataTable();
|
|
dataAdapter.Fill(dt);
|
|
|
|
Assert.AreEqual("Base", dt.Columns[0].ColumnName);
|
|
Assert.AreEqual("Ref", dt.Columns[1].ColumnName);
|
|
|
|
Assert.AreEqual(2, dt.Rows.Count);
|
|
|
|
Assert.AreEqual(42, dt.Rows.Cast<DataRow>().First()[0]);
|
|
Assert.AreEqual(42, dt.Rows.Cast<DataRow>().First()[1]);
|
|
|
|
Assert.AreEqual(41, dt.Rows.Cast<DataRow>().Last()[0]);
|
|
Assert.AreEqual(41, dt.Rows.Cast<DataRow>().Last()[1]);
|
|
}
|
|
|
|
using (var command = new OleDbCommand("select * from [Sheet2$]", connection))
|
|
using (var dataAdapter = new OleDbDataAdapter())
|
|
{
|
|
dataAdapter.SelectCommand = command;
|
|
var dt = new DataTable();
|
|
dataAdapter.Fill(dt);
|
|
|
|
Assert.AreEqual("Ref1", dt.Columns[0].ColumnName);
|
|
Assert.AreEqual("Ref2", dt.Columns[1].ColumnName);
|
|
Assert.AreEqual("Sum", dt.Columns[2].ColumnName);
|
|
Assert.AreEqual("SumRef", dt.Columns[3].ColumnName);
|
|
|
|
var expected = new Dictionary<string, double>()
|
|
{
|
|
{"Ref1", 42 },
|
|
{"Ref2", 41 },
|
|
{"Sum", 83 },
|
|
{"SumRef", 83 },
|
|
};
|
|
|
|
foreach (var col in dt.Columns.Cast<DataColumn>())
|
|
foreach (var row in dt.Rows.Cast<DataRow>())
|
|
{
|
|
Assert.AreEqual(expected[col.ColumnName], row[col]);
|
|
}
|
|
|
|
Assert.AreEqual(2, dt.Rows.Count);
|
|
}
|
|
|
|
connection.Close();
|
|
}
|
|
}
|
|
}
|
|
|
|
private string CreateTestFile()
|
|
{
|
|
using (var wb = new XLWorkbook())
|
|
{
|
|
var ws = wb.AddWorksheet("Sheet1");
|
|
ws.Cell("A1").Value = "Base";
|
|
ws.Cell("B1").Value = "Ref";
|
|
|
|
ws.Cell("A2").Value = 42;
|
|
ws.Cell("A3").Value = 41;
|
|
|
|
ws.Cell("B2").FormulaA1 = "=A2";
|
|
ws.Cell("B3").FormulaA1 = "=A3";
|
|
|
|
ws = wb.AddWorksheet("Sheet2");
|
|
ws.Cell("A1").Value = "Ref1";
|
|
ws.Cell("B1").Value = "Ref2";
|
|
ws.Cell("C1").Value = "Sum";
|
|
ws.Cell("D1").Value = "SumRef";
|
|
|
|
ws.Cell("A2").FormulaA1 = "=Sheet1!A2";
|
|
ws.Cell("B2").FormulaA1 = "=Sheet1!A3";
|
|
ws.Cell("C2").FormulaA1 = "=SUM(A2:B2)";
|
|
ws.Cell("D2").FormulaA1 = "=SUM(Sheet1!A2:Sheet1!A3)";
|
|
|
|
ws.Cell("A3").FormulaA1 = "=Sheet1!B2";
|
|
ws.Cell("B3").FormulaA1 = "=Sheet1!B3";
|
|
ws.Cell("C3").FormulaA1 = "=SUM(A3:B3)";
|
|
ws.Cell("D3").FormulaA1 = "=SUM(Sheet1!B2:Sheet1!B3)";
|
|
|
|
var path = Path.ChangeExtension(Path.GetTempFileName(), "xlsx");
|
|
wb.SaveAs(path, true, true);
|
|
|
|
return path;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
#endif
|