我纔剛剛開始解決類似的情況,但我認爲這可能滿足您的需求:
http://www.codeproject.com/Articles/246772/Convert-xlsx-xls-to-csv
它使用ExcelDataReader API,你可以從的NuGet
http://exceldatareader.codeplex.com/
得到
像蒂姆說的那樣,你將不得不確保並且可能驗證表單和列之間的結構是相同的。您可能還必須在第一張紙上吃掉所有紙張上的標題行。完成後,我會發布更新和一些代碼示例。
更新[7/15/2013]。這是我完成的代碼。不是很花哨,但它完成了工作。所有表單都是DataSet中的表格,所以您只需循環表格即可添加到目標上。我輸出到MongoDB,但我猜你可以輕鬆地將CSV文件換成StreamWriter。
private static void ImportValueSetAttributeFile(string filePath)
{
FileStream stream = File.Open(filePath, FileMode.Open, FileAccess.Read);
// Reading from a OpenXml Excel file (2007 format; *.xlsx)
IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream);
// DataSet - The result of each spreadsheet will be created in the result.Tables
DataSet result = excelReader.AsDataSet();
// Free resources (IExcelDataReader is IDisposable)
excelReader.Close();
var connectionString = ConfigurationManager.ConnectionStrings[0].ConnectionString;
var database = ConfigurationManager.AppSettings["database"];
var mongoAccess = new MongoDataAccess(connectionString, database);
var cdm = new BaseDataManager();
int ind = 0;
for (int i = 0; i < result.Tables.Count; i++)
{
int row_no = 1;
while (row_no < result.Tables[ind].Rows.Count) // ind is the index of table
// (sheet name) which you want to convert to csv
{
var currRow = result.Tables[ind].Rows[row_no];
var valueSetAttribute = new ValueSetAttribute()
{
CmsId = currRow[0].ToString(),
NqfNumber = currRow[1].ToString(),
ValueSetName = currRow[2].ToString(),
ValueSetOid = currRow[3].ToString(),
Definition = currRow[4].ToString(),
QdmCategory = currRow[5].ToString(),
Expansion = currRow[6].ToString(),
Code = currRow[7].ToString(),
Description = currRow[8].ToString(),
CodeSystem = currRow[9].ToString(),
CodeSystemOid = currRow[10].ToString(),
CodeSystemVersion = currRow[11].ToString()
};
cdm.AddRecords<ValueSetAttribute>(valueSetAttribute, "ValueSetAttributes");
row_no++;
}
ind++;
}
}
所有的表格格式都完全一樣嗎?例如 - 他們每個人都有一個標題行?組合內容是否太大而無法放在一張紙上? –
CSV文件基本上是原始文本文件,不支持多個選項卡。如果圖紙具有相同的格式,則可以將內容添加到所有其他格式的圖像中。 –