C# 将多行从已读文件导出到Excel
我有一些代码,目前正用于从Excel电子表格中获取一行数据,并将其转换为另一个电子表格发送给我的客户。我要做的是让这段代码在最终的电子表格上返回多行。现在我正在这样做:C# 将多行从已读文件导出到Excel,c#,excel,winforms,C#,Excel,Winforms,我有一些代码,目前正用于从Excel电子表格中获取一行数据,并将其转换为另一个电子表格发送给我的客户。我要做的是让这段代码在最终的电子表格上返回多行。现在我正在这样做: using (OleDbConnection conn = new OleDbConnection(pathConn)) { for (int i = 0; i < excelSheets.Length; i++) { OleDbDataAdapter adapter = new OleDb
using (OleDbConnection conn = new OleDbConnection(pathConn))
{
for (int i = 0; i < excelSheets.Length; i++)
{
OleDbDataAdapter adapter = new OleDbDataAdapter("Select * from [" +
excelSheets[i] + "]", conn);
System.Data.DataTable dt = new System.Data.DataTable();
adapter.Fill(dt);
tring dtBrokerName = dt.Rows[0].Field<string>("ProducerName");
//[Sets numerous fields]
// create final output report based on imported data
GenerateExcelData(dtBrokerName, dtExpirationDate, dtPolicyNumber,
dtCurrentPrice, tier, usage, city, dtcValue);
}
}
它利用由第三方开发的此类:
class CreateExcelDoc
{
private Excel.Application app = null;
private Excel.Workbook workbook = null;
private Excel.Worksheet worksheet = null;
private Excel.Range workSheet_range = null;
public CreateExcelDoc()
{
createDoc();
}
public void createDoc()
{
try
{
app = new Excel.Application();
app.Visible = true;
workbook = app.Workbooks.Add(1);
worksheet = (Excel.Worksheet)workbook.Sheets[1];
}
catch (Exception e)
{
Console.Write("Error");
}
finally
{
}
}
public void createHeaders(int row, int col, string htext, string cell1,
string cell2, int mergeColumns, string b, bool font, double size, string
fcolor)
{
worksheet.Cells[row, col] = htext;
workSheet_range = worksheet.get_Range(cell1, cell2);
workSheet_range.Merge(mergeColumns);
switch (b)
{
case "Black":
workSheet_range.Interior.Color = Color.Black.ToArgb();
break;
case "Gray":
workSheet_range.Interior.Color = Color.Gray.ToArgb();
break;
case "Red":
workSheet_range.Interior.Color = Color.Red.ToArgb();
break;
case "Green":
workSheet_range.Interior.Color = Color.ForestGreen.ToArgb();
break;
case "Yellow":
workSheet_range.Interior.Color = Color.LightYellow.ToArgb();
break;
default:
// workSheet_range.Interior.Color = System.Drawing.Color..ToArgb();
break;
}
workSheet_range.Borders.Color = Color.Black.ToArgb();
workSheet_range.Font.Bold = font;
workSheet_range.ColumnWidth = size;
if (fcolor.Equals(""))
{
workSheet_range.Font.Color = Color.White.ToArgb();
}
else
{
workSheet_range.Font.Color = Color.Black.ToArgb();
}
}
public void addData(int row, int col, string data,
string cell1, string cell2, string format)
{
worksheet.Cells[row, col] = data;
workSheet_range = worksheet.get_Range(cell1, cell2);
workSheet_range.Borders.Color = Color.Black.ToArgb();
workSheet_range.NumberFormat = format;
}
}
我试图让程序读取我导入的Excel文件中的每一行,并在导出报告中逐行返回值。我试图改变:
BatchRenewalReport.addData(2, 1, dtBrokerName, "A2", "A2", "");
到目前为止,线路还没有成功。在你的位置上,我会放弃那个课程,使用ePlus。一个简单的
工作表.LoadFromDataTable
或LoadFromCollection
将创建一个包含数据和标题的表。然后,您可以根据需要应用样式、重命名标题等。我认为它甚至尊重数据注释属性,因此您可以为每个列或类属性设置DisplayName
属性。pplus绝对不是一个坏选项,我在许多应用程序中使用它,效果非常好。这正是我得到的感觉。谢谢你的建议,我将把它转换成EPPlus。实际上,不幸的是,EPPlus似乎不起作用,因为我需要能够同时读取.xls和xlsx文件。在你的位置上,我会放弃那个类,使用EPPlus。一个简单的工作表.LoadFromDataTable
或LoadFromCollection
将创建一个包含数据和标题的表。然后,您可以根据需要应用样式、重命名标题等。我认为它甚至尊重数据注释属性,因此您可以为每个列或类属性设置DisplayName
属性。pplus绝对不是一个坏选项,我在许多应用程序中使用它,效果非常好。这正是我得到的感觉。谢谢你的建议,我将把它转换成EPPlus。实际上,不幸的是,EPPlus似乎无法工作,因为我需要能够同时读取.xls和xlsx文件。
BatchRenewalReport.addData(2, 1, dtBrokerName, "A2", "A2", "");