Ho un documento di calcolo che contiene 182 colonne. Ho bisogno di inserire i dati del foglio di calcolo in una tabella dati, scheda per scheda, ma ho bisogno di scoprire come sto aggiungendo i dati da ciascuna scheda, qual è il nome della scheda e aggiungere il nome della scheda a una colonna nella tabella dei dati .Come recuperare i nomi delle schede dal foglio Excel utilizzando OpenXML
Ecco come ho impostato la tabella dati.
I loop quindi nella cartella di lavoro e drill-down per l'oggetto sheetData
e camminare attraverso ogni riga e colonna, ottenendo i dati della cella.
DataTable dt = new DataTable();
for (int i = 0; i <= col.GetUpperBound(0); i++)
{
try
{
dt.Columns.Add(new DataColumn(col[i].ToString(), typeof(string)));
}
catch (Exception e)
{
MessageBox.Show("Uploader Error" + e.ToString());
return null;
}
}
dt.Columns.Add(new DataColumn("SheetName", typeof(string)));
Tuttavia, alla fine della matrice di stringhe che uso per la Tabella dati, ho bisogno di aggiungere il nome della scheda. Come posso trovare il nome della scheda mentre eseguo il looping nel foglio in Open XML?
Ecco il mio codice finora:
using (SpreadsheetDocument spreadSheetDocument =
SpreadsheetDocument.Open(Destination, false))
{
WorkbookPart workbookPart = spreadSheetDocument.WorkbookPart;
Workbook workbook = spreadSheetDocument.WorkbookPart.Workbook;
Sheets sheets =
spreadSheetDocument
.WorkbookPart
.Workbook
.GetFirstChild<DocumentFormat.OpenXml.Spreadsheet.Sheets>();
OpenXmlElementList list = sheets.ChildElements;
foreach (WorksheetPart worksheetpart in workbook.WorkbookPart.WorksheetParts)
{
Worksheet worksheet = worksheetpart.Worksheet;
foreach (SheetData sheetData in worksheet.Elements<SheetData>())
{
foreach (Row row in sheetData.Elements())
{
string[] thisarr = new string[183];
int index = 0;
foreach (Cell cell in row.Elements())
{
thisarr[(index)] = GetCellValue(spreadSheetDocument, cell);
index++;
}
thisarr[182] = ""; //need to add tabname here
if (thisarr[0].ToString() != "")
{
dt.Rows.Add(thisarr);
}
}
}
}
}
return dt;
Solo una nota: in precedenza ho ricevuto i nomi delle schede dalla proprietà InnerXml di "lista" in
OpenXmlElementList list = sheets.ChildElements;
però ho notato come ho 'm looping nel foglio di calcolo non ottiene i nomi delle schede nel giusto ordine.
http://msdn.microsoft.com/en-us/library/bb507946. aspx –
che funziona bene se voglio solo estrarre i nomi delle schede ... che posso, analizzando l'interno/esterno xml .. ma voglio farlo nel mio ciclo For .. Sto avendo problemi ad accedere a Sheet mentre io sono all'interno del livello SheetData. – Kwalke001
Non puoi lavorare con l'oggetto "foglio di lavoro" per ottenere il suo nome? L'ultimo esempio di codice in quella pagina mostra come eseguire il loop degli attributi di un foglio: presumibilmente il nome del foglio è uno di quegli attributi (non ho esperienza però). –