private bool ReadHyperLinks(XlsxWorksheet sheet, DataTable table)
{
// ReadTo HyperLinks Node
if (m_xmlReader == null)
{
//Console.WriteLine("m_xmlReader is null");
return(false);
}
//Console.WriteLine(m_xmlReader.Depth.ToString());
m_xmlReader.ReadToFollowing(XlsxWorksheet.N_hyperlinks);
if (m_xmlReader.IsEmptyElement)
{
//Console.WriteLine("not find hyperlink");
return(false);
}
// Read Realtionship Table
//Console.WriteLine("sheetrel:{0}", sheet.Path);
var sheetRelStream = m_zipWorker.GetWorksheetRelsStream(sheet.Path);
var hyperDict = new Dictionary <string, string>();
if (sheetRelStream != null)
{
using (var reader = XmlReader.Create(sheetRelStream))
{
while (reader.Read())
{
if (reader.NodeType == XmlNodeType.Element && reader.LocalName == XlsxWorkbook.N_rel)
{
string rid = reader.GetAttribute(XlsxWorkbook.A_id);
hyperDict[rid] = reader.GetAttribute(XlsxWorkbook.A_target);
}
}
sheetRelStream.Close();
}
}
// Read All HyperLink Node
while (m_xmlReader.Read())
{
if (m_xmlReader.NodeType != XmlNodeType.Element)
{
break;
}
if (m_xmlReader.LocalName != XlsxWorksheet.N_hyperlink)
{
break;
}
string aref = m_xmlReader.GetAttribute(XlsxWorksheet.A_ref);
string display = m_xmlReader.GetAttribute(XlsxWorksheet.A_display);
string rid = m_xmlReader.GetAttribute(XlsxWorksheet.A_rid);
////Console.WriteLine("{0}:{1}", aref.Substring(1), display);
//Console.WriteLine("hyperlink:{0}",hyperDict[rid]);
var hyperlink = display;
if (hyperDict.ContainsKey(rid))
{
hyperlink = hyperDict[rid];
}
int col = -1;
int row = -1;
XlsxDimension.XlsxDim(aref, out col, out row);
//Console.WriteLine("{0}:[{1},{2}]",aref, row, col);
if (col >= 1 && row >= 1)
{
row = row - 1;
col = col - 1;
if (row == 0 && m_isFirstRowAsColumnNames)
{
// TODO(fanfeilong):
var value = table.Columns[col].ColumnName;
XlsCell cell = new XlsCell(value);
cell.SetHyperLink(hyperlink);
table.Columns[col].DefaultValue = cell;
}
else
{
var value = table.Rows[row][col];
var cell = new XlsCell(value);
cell.SetHyperLink(hyperlink);
//Console.WriteLine(cell.MarkDownText);
table.Rows[row][col] = cell;
}
}
}
// Close
m_xmlReader.Close();
if (m_sheetStream != null)
{
m_sheetStream.Close();
}
return(true);
}