所以我试图从excel导入创建数据表,然后用于其他事情。我知道电子表格表的名称,所以我在我的文档顶部创建了我的数据表:
private DataTable Version,Pi_PROCESSPi_PMLIFEPROFILE,PIAPPLICATION,PIRUGGEDISING,ELECTRONICCOMPONENT,HFANDRFCOMPONENTS,HYBRIDANDMULTICHIPMODULE,COTSBOARDS, VARIOUSSUBASSEMBLIES,PARTCOUNT, FAMILYCOUNT;
当读取电子表格时,我有一个列表和一个for循环,将spreadhseet名称分配给该列表
List<string>ExcelSheets = new List<string>();
excel电子表格列表和数据表声明具有相同的名称
我有一个函数可以根据给定的工作表名称读取excel电子表格,所以我希望能够执行类似(伪代码)的操作:
foreach ExcelSheets{
Datatable = dt.ReadFunction()
}
DataTable是文件顶部声明的数据表。
所以我想对列表中的每个Sheet说,运行该函数并将结果分配给相应的数据表
编辑:参考代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Web;
using System.Xml;
using DocumentFormat.OpenXml;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Spreadsheet;
using System.Data.OleDb;
using System.Reflection;
using System.Text.RegularExpressions;
using S = DocumentFormat.OpenXml.Spreadsheet.Sheets;
using E = DocumentFormat.OpenXml.OpenXmlElement;
using A = DocumentFormat.OpenXml.OpenXmlAttribute;
namespace FidesToRWB
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
#region Strings
string FileType;
string FileDesc1;
string FileDesc2;
string FileQty;
string FileID;
string T_max;
string NLayer;
string NConnection;
string NContact;
string NAnnualCycles;
string NumberOfPins;
string NumberofSMD;
string RiseofTemp;
string PApplied;
string VApplied;
string VContact;
string IContact;
string UNormal;
string LimitandManual;
string NoofManov;
string Louput;
string NDT;
string NST;
string IApplied;
string Qman;
string Qcomponent;
string RAMan;
string Experiance;
private string newLine;
#endregion
private DataTable Version,Pi_PROCESSPi_PMLIFEPROFILE,PIAPPLICATION,PIRUGGEDISING,ELECTRONICCOMPONENT,HFANDRFCOMPONENTS,HYBRIDANDMULTICHIPMODULE,COTSBOARDS, VARIOUSSUBASSEMBLIES,PARTCOUNT, FAMILYCOUNT;
List<string>ExcelSheets = new List<string>();
List<string> phases = new List<string>();
GetDataFromExcel dt = new GetDataFromExcel();
int ColIndex = 0;
int start = 0;
private void btnBrowse_Click(object sender, EventArgs e)
{
OpenFileBox();
}
/// <summary>
/// Reads the file based on the selected grid view.
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnRead_Click(object sender, EventArgs e)
{
//Need to check if the combo box is empty first - otherwise we will get an error...
if (cmbSheetSelect.SelectedIndex <= -1)
{
MessageBox.Show("Please select a sheet to display", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
else
{
string Sheet = cmbSheetSelect.SelectedItem.ToString();
string TrimmedSheet = Sheet.TrimEnd();
//Enter the start row number in Excel of the data
if (TrimmedSheet == "Pi_PROCESS&Pi_PM&LIFE PROFILE")
{
start = 18;
ColIndex = 16;
}
if (TrimmedSheet == "PI APPLICATION")
{
start = 9;
ColIndex = 4;
}
if (TrimmedSheet == "PI RUGGEDISING")
{
start = 9;
}
if (TrimmedSheet == "ELECTRONIC COMPONENT" || TrimmedSheet == "HF AND RF COMPONENTS" || TrimmedSheet == "HYBRID AND MULTICHIP MODULE" || TrimmedSheet == "COTS BOARDS")
{
start = 70;
ColIndex = 5;
}
if (TrimmedSheet == "VARIOUS SUBASSEMBLIES")
{
start = 70;
}
foreach (var sheetName in ExcelSheets)
{
var prop = Form1.GetType().GetField(sheetName, BindingFlags.NonPublic | BindingFlags.Instance);
prop.SetValue(this, dt.ExtractExcelSheetValuesToDataTable(txtFileLocation.Text, Sheet, start, ColIndex));
}
//DataTable t = dt.ExtractExcelSheetValuesToDataTable(txtFileLocation.Text, Sheet, start, ColIndex);
//dataGridView1.DataSource = t;
}
}
/// <summary>
/// Gets the sheet information
/// </summary>
/// <param name="GetSheetInfo"></param>
public void GetSheetInfo(string fileName)
{
Sheets theSheets = null;
// Open file as read-only.
using (SpreadsheetDocument mySpreadsheet = SpreadsheetDocument.Open(fileName, false))
{
S sheets = mySpreadsheet.WorkbookPart.Workbook.Sheets;
WorkbookPart wbPart;
wbPart = mySpreadsheet.WorkbookPart;
theSheets = wbPart.Workbook.Sheets;
foreach (Sheet item in theSheets)
{
cmbSheetSelect.Items.Add(item.Name);
ExcelSheets.Add(item.Name);
}
}
}
private void txtFileLocation_Click(object sender, EventArgs e)
{
OpenFileBox();
}
public void OpenFileBox()
{
Stream myStream = null;
OpenFileDialog openFileDialog1 = new OpenFileDialog();
openFileDialog1.InitialDirectory = "C:\\";
openFileDialog1.Filter = "Excel 2007+ (*.xlsx)|*.xlsx";
openFileDialog1.FilterIndex = 2;
openFileDialog1.RestoreDirectory = true;
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
try
{
if ((myStream = openFileDialog1.OpenFile()) != null)
{
using (myStream)
{
// Insert code to read the stream here.
txtFileLocation.Text = openFileDialog1.FileName;
cmbSheetSelect.Enabled = true;
btnRead.Enabled = true;
GetSheetInfo(txtFileLocation.Text);
lblPIP.Text = dt.GetCellValue(txtFileLocation.Text, "Pi_PROCESS&Pi_PM&LIFE PROFILE", "D3");
lblPILF.Text = dt.GetCellValue(txtFileLocation.Text, "Pi_PROCESS&Pi_PM&LIFE PROFILE", "D4");
lblPIRFHF.Text = dt.GetCellValue(txtFileLocation.Text, "Pi_PROCESS&Pi_PM&LIFE PROFILE", "D5");
int x = 20; int y = 20;
for (int i = 18; i < 37; i++)
{
if (dt.GetCellValue(txtFileLocation.Text, "Pi_PROCESS&Pi_PM&LIFE PROFILE", "A"+i.ToString()).ToString() != "")
{
phases.Add(dt.GetCellValue(txtFileLocation.Text, "Pi_PROCESS&Pi_PM&LIFE PROFILE", "A"+i.ToString()).ToString());
}
y += 30;
}
}
}
}
catch (Exception ex)
{
MessageBox.Show("Error: Could not read file from disk. Original error: " + ex.Message);
}
}
}
private void label6_Click(object sender, EventArgs e)
{
}
public void GenerateCSV(string fileLoc, string type)
{
//Strings for things.
string csvFilePath = "C:\\RWBExport.csv";
var csv = new StringBuilder();
if (type == "ELECTRONIC COMPONENT")
{
newLine = string.Format("{0},{1},{2},{3} {4}", "ID", "Category", "ParamValuesKey", "PartNumber", Environment.NewLine);
csv.Append(newLine);
foreach (DataGridViewRow row in dataGridView1.Rows)
{
//Type
string Type = row.Cells[1].Value.ToString();
Type = Type.Substring(Type.IndexOf('[') + 1);
Type = Type.Remove(Type.Length - 1);
switch (Type)
{
case "ECDS":
FileType = "FID-DS";
break;
default:
MessageBox.Show("Error, no matchin param value");
break;
}
//Appendix 1
string app1 = row.Cells[2].Value.ToString();
app1 = app1.Substring(app1.IndexOf('[') + 1);
app1 = app1.Remove(app1.Length - 1);
switch (app1)
{
#region Switch Case for Semiconductor Case
case "ECDS_01":
FileDesc2 = "THSSP";
break;
case "ECDS_02":
FileDesc2 = "SSSLP";
break;
case "ECDS_03":
FileDesc2 = "SMSLP";
break;
case "ECDS_04":
FileDesc2 = "THPP";
break;
case "ECDS_05":
FileDesc2 = "SSSCP";
break;
case "ECDS_06":
FileDesc2 = "SPLLP";
break;
case "ECDS_07":
FileDesc2 = "SHPSP";
break;
case "ECDS_08":
FileDesc2 = "SHSG";
break;
case "ECDS_09":
FileDesc2 = "THM";
break;
case "ECDS_37":
FileDesc2 = "TSSOP";
break;
case "ECDS_32":
FileDesc2 = "TSOP";
break;
case "ECDS_28":
FileDesc2 = "SO";
break;
default:
FileDesc2 = "BCHIP";
break;
#endregion
}
//Appendix2
string app2 = row.Cells[3].Value.ToString();
app2 = app2.Substring(app2.IndexOf('[') + 1);
app2 = app2.Remove(app2.Length - 1);
switch (app2)
{
#region Switch Case for Semiconductor Type
case "ECDS_10":
FileDesc1 = "LDSD";
break;
case "ECDS_11":
FileDesc1 = "LDRD";
break;
case "ECDS_12":
FileDesc1 = "LDZR";
break;
case "ECDS_13":
FileDesc1 = "LDPD";
break;
case "ECDS_14":
FileDesc1 = "PDTH";
break;
case "ECDS_15":
FileDesc1 = "PDRD";
break;
case "ECDS_16":
FileDesc1 = "PDZR";
break;
case "ECDS_17":
FileDesc1 = "PDPD";
break;
case "ECDS_18":
FileDesc1 = "LTSJ";
break;
case "ECDS_19":
FileDesc1 = "LTSM";
break;
case "ECDS_20":
FileDesc1 = "LTSB";
break;
case "ECDS_21":
FileDesc1 = "PTSB";
break;
case "ECDS_22":
FileDesc1 = "PTSM";
break;
case "ECDS_23":
FileDesc1 = "PTIG";
break;
#endregion
}
//Qty
FileQty = row.Cells[5].Value.ToString();
//ID
FileID = row.Cells[0].Value.ToString();
#region Of things you never want to repeat...add this to that list. Pulls all the variables.
T_max = row.Cells[12].Value.ToString();
NLayer = row.Cells[13].Value.ToString();
NConnection = row.Cells[14].Value.ToString();
NContact = row.Cells[15].Value.ToString();
NAnnualCycles = row.Cells[16].Value.ToString();
NumberOfPins = row.Cells[17].Value.ToString();
NumberofSMD = row.Cells[18].Value.ToString();
string numberOfDS = row.Cells[19].Value.ToString();
RiseofTemp = row.Cells[20].Value.ToString();
PApplied = row.Cells[21].Value.ToString();
VApplied = row.Cells[22].Value.ToString();
VContact = row.Cells[24].Value.ToString();
IContact = row.Cells[25].Value.ToString();
UNormal = row.Cells[26].Value.ToString();
LimitandManual = row.Cells[27].Value.ToString();
NoofManov = row.Cells[28].Value.ToString();
Louput = row.Cells[29].Value.ToString();
NDT = row.Cells[30].Value.ToString();
NST = row.Cells[31].Value.ToString();
IApplied = row.Cells[32].Value.ToString();
Qman = row.Cells[7].Value.ToString();
Qcomponent = row.Cells[8].Value.ToString();
RAMan = row.Cells[9].Value.ToString();
Experiance = row.Cells[10].Value.ToString();
#endregion
//QMAN
string line = FileID + " " + FileType + " " + FileDesc1 + " " + FileDesc2 + " " + FileQty;
//QUAN=1 ADJF=1 DSTYPE=LDSD DSCASE=SSSCP NINC=1 QMAN=HIGH QCOM=HIGH RMAN=VRA EFACT=RMNP PLACE=DNIF NPIN=3 TRCM=TRUSER TEMPR=20 TJA=0 POWEOP=0 STMODE=STCALC VOLT=0.5 VOLTOP=0.5 VOLTRA=1 CHSA=4 DVDC=1 RFHFPF=2.5
var DataLine = string.Format("{0},{1},{2},{3} {4}",
FileID, FileType,
"QUAN=" + FileQty + " DSTYPE=" + FileDesc1 + " DSCASE=" + FileDesc2 + " NINC=" + numberOfDS +
" QMAN=" + Qman + " QCOM=" + Qcomponent + " RMAN=" + RAMan + " EFACT=" + Experiance + " NPIN=" +
NumberOfPins + " TRCM=TRUSER TEMPR=" + RiseofTemp
, "FID-" + FileID, Environment.NewLine);
csv.Append(DataLine);
}
if (type == "Pi_PROCESS&Pi_PM&LIFE PROFILE")
{
newLine = string.Format(
"{0},{1},{2},{3},{4},{5},{6},{7},{9},{10},{11},{12},{13},{14},{15},{16},{17},{18},{19},{20},{21},{22},{23} {25}",
"AmbientTemp", "AppPollution", "CycleDuration", "DeltaTCycling", "Description", "EnvPollution", "HumanExposure", "MachineExposure", "MaxTCycling", "NetworkType", "NoCycles", "OnForPhase", "PhaseDuration", "ProductManip", "Project", "ProLevel","RandomVibs","RelHumidity","SalPollution", "SubIndex","SystemMobility","UserQual", "UserType","WeatherExposure", Environment.NewLine);
csv.Append(newLine);
}
}
File.WriteAllText(fileLoc, csv.ToString());
MessageBox.Show("File written to" + fileLoc);
}
private void btnGenerateImport_Click(object sender, EventArgs e)
{
Stream myStream = null;
SaveFileDialog CSVGen = new SaveFileDialog();
CSVGen.InitialDirectory = "C:\\";
CSVGen.Filter = "CSV File (*.csv)|*.csv";
CSVGen.FilterIndex = 2;
CSVGen.RestoreDirectory = true;
CSVGen.ShowDialog();
string fileLoc = CSVGen.FileName;
GenerateCSV(fileLoc, cmbSheetSelect.Text);
}
}
}
答案 0 :(得分:1)
你必须使用Reflection来实现这个
foreach(var sheetName in ExcelSheets)
{
var prop = this.GetType().GetField(sheetName, BindingFlags.NonPublic | BindingFlags.Instance);
prop.SetValue(this, dt.ReadFunction());
}
我在我的Form1构造函数中有以下内容,它对我有效。
private DataTable Version, Pi_PROCESSPi_PMLIFEPROFILE, PIAPPLICATION, PIRUGGEDISING, ELECTRONICCOMPONENT, HFANDRFCOMPONENTS, HYBRIDANDMULTICHIPMODULE, COTSBOARDS, VARIOUSSUBASSEMBLIES, PARTCOUNT, FAMILYCOUNT;
List<string> ExcelSheets = new List<string>();
public Form1()
{
InitializeComponent();
var list = new string[] { "Version", "Pi_PROCESSPi_PMLIFEPROFILE", "PIAPPLICATION", "PIRUGGEDISING", "ELECTRONICCOMPONENT", "HFANDRFCOMPONENTS", "HYBRIDANDMULTICHIPMODULE", "COTSBOARDS", "VARIOUSSUBASSEMBLIES", "PARTCOUNT", "FAMILYCOUNT" };
ExcelSheets= list.ToList();
foreach(var sheet in ExcelSheets)
{
var prop = this.GetType().GetField(sheet, BindingFlags.NonPublic | BindingFlags.Instance);
Debug.WriteLine(prop.FieldType);
Debug.WriteLine(prop != null);
}
}