我有N個在存儲每天員工的活動在一個月的目錄Excel文件。他們有三列:日期,活動和類別。我不需要這個類別。有效的數據結構來保存員工的活動?
我想基本上看了N Excel文件和輸出,有效地使每個僱員按日期排序的所有活動,例如Word文檔:1
日至5日:
天:
僱員#1:
-task一個
-task b
-taskç
僱員#2:
-task一個
-task b
-taskç
...
第2天: ...
...
... 7
天至11天:
... ...
我想知道什麼數據結構我可以用來有效地持有這些信息,所以我可以很容易地寫我想要的文件。現在,我使用一個字符串數組來保存每個擅長行,他們都存儲在一個列表,然後在我的字典存儲每個員工,關鍵是每個員工的用戶名。
雖然我認爲這些數據結構是有效的自己,他們是不是我的主要目的是要打印每天下令對每個員工的數據太友好,所以也許關鍵本身應該是日期。
要回顧一下:當前數據結構使用:
Dictionary<string,List<string[]>> dictActividades = new Dictionary<string,List<string[]>>();
在每個員工的Excel文件中所有的線都存儲在列表中。 我真的不需要字典功能,因爲我可以按順序閱讀所有內容。我可以馬上打印我正在讀一員工的Excel文件,但我將不得不看了N一次Excel文件(雖然n是很小的)
的思考?
編輯:這是我目前有:
string directorioActividades = @"\\mar-fp01\mar_tecnologia$\Coordinacion de Apoyo a Usuarios\Informes\" +
fechaInicio.Year.ToString() + "\\" + fechaInicio.Year.ToString() + "-" +
fechaInicio.Month.ToString().PadLeft(2, '0');
string[] archivos = Directory.GetFiles(directorioActividades, "*.xlsx");
Dictionary<string,List<string[]>> dictActividades = new Dictionary<string,List<string[]>>();
for (int j = 0; j < archivos.Length; j++)
{
List<string[]> actividades = new List<string[]>();
string nombreArchivo = Path.GetFileNameWithoutExtension(archivos[j]);
String excelConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;" +
"Data Source=" + archivos[j] + ";" +
"Extended Properties=Excel 8.0; ";
using (OleDbConnection con = new OleDbConnection(excelConnectionString))
{
OleDbCommand command = new OleDbCommand("Select * From [Actividades$]", con);
con.Open();
OleDbDataReader dr = command.ExecuteReader();
int cantidadcolumnas = dr.FieldCount;
string tipodatos = null;
string[] filaDatos = new string[cantidadcolumnas];
while (dr.Read())
{
for (int k = 0; k < cantidadcolumnas; k++)
{
tipodatos = dr.GetFieldType(k).ToString();
if (tipodatos == "System.Int32")
{
filaDatos[k] = dr.GetInt32(k).ToString();
}
if (tipodatos == "System.String")
{
filaDatos[k] = dr.GetString(k);
}
if (tipodatos == "System.DateTime")
{
filaDatos[k] = dr.GetDateTime(k).ToShortDateString();
}
}
actividades.Add(filaDatos);
}//while dr.read
}
dictActividades.Add(nombreArchivo, actividades);
}//for archivos
儘管此代碼是很短的,使用最少的數據結構,我能想到的,印刷是相當困難的,因爲關鍵是員工的用戶名,而不是日期和代碼應按日期列出的格式按日期列印每個員工的每項活動
這個類只能存儲excel的行,我基本上已經在一個字符串[3](我不需要存儲日期作爲日期,因爲我不計算任何相關日期)。我將用我目前的實施更新我的問題,以澄清 – fjleon
如您所願。我的觀點是,你的excel文件結構不包含你所需要的任何數據,因此不需要特殊的數據結構 - 只是一個帶有值的扁平列表。 –
@fjleon更新只是證明了我的觀點。首先,強類型比數組更好(這也是一個FYI類)。其次,無論你是否計算某些東西,日期最好存儲爲日期,而不是字符串。這有助於排序,分組等。而且這些報告很容易用LINQ查詢產生 - 事實上,這是LINQ專爲此設計的,而不是用普通代碼可以完成的奇特事情。 –