Нашел ответ на мой вопрос:
function funct($xls){
include_once '../system/PHPExcel/Classes/PHPExcel/IOFactory.php';
$objPHPExcel = PHPExcel_IOFactory::load($xls);
$objPHPExcel->setActiveSheetIndex(9);
$aSheet = $objPHPExcel->getActiveSheet();
$array = array();
foreach($aSheet->getRowIterator() as $row){
$cellIterator = $row->getCellIterator();
//this array will contain arrays with cells values
$item = array();
foreach($cellIterator as $key => $cell){
//merged cells echo start
foreach ($aSheet->getMergeCells() as $cells) {
if ($cell->isInRange($cells)) {
$currMergedCellsArray = PHPExcel_Cell::splitRange($cells);
$cell = $aSheet->getCell($currMergedCellsArray[0][0]);
echo $cells,'\n';
echo '';
break;
}
}
//merged cells echo end
//skip adding tables which we don't need
if($key == "A" || $key == "E" || $key == "F" || $key == "G" || $key == 'H') continue;
array_push($item, $cell->getCalculatedValue());
}
array_push($array, $item);
}
return $array;
}
Благодаря Stesoc и annakata я изобразил его, Это - код, который я теперь использую, и он работает прекрасный
<xsl:template match="*">
<xsl:param name="parentElm">
<xsl:value-of select="name(..)" />
</xsl:param>
<xsl:choose>
<xsl:when test="local-name() = 'deliverydateasked'">
<xsl:element name="deliverydateasked">
<xsl:call-template name="FormatDate">
<xsl:with-param name="DateTime" select="."/>
</xsl:call-template>
</xsl:element>
</xsl:when>
<xsl:otherwise>
<xsl:element name="{local-name()}">
<xsl:copy-of select="@*" />
<xsl:apply-templates select="@* | node()" />
</xsl:element>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template name="FormatDate">
<xsl:param name="DateTime" />
<xsl:variable name="date">
<xsl:value-of select="substring-before($DateTime,'T')" />
</xsl:variable>
<xsl:if test="string-length($date) != 10">
<xsl:value-of select="$DateTime"/>
</xsl:if>
<xsl:if test="string-length($date) = 10">
<xsl:value-of select="$date"/>
</xsl:if>
</xsl:template>
Откровенно говоря, это озирается вокруг права мне - иногда, простая подстрока достаточно хороша.
Однако, если Вы находитесь на земле.NET, и Вам действительно нужна дополнительная функциональность.NET имеет Дополнительные Объекты XSLT
править: ОИК, у Вас есть основные применять-шаблоны концептуальная проблема. Попробуйте это (отметьте копию и корневое шаблонное соответствие):
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="*">
<xsl:copy><xsl:apply-templates /></xsl:copy>
</xsl:template>
<xsl:template match="deliverydateasked">
<xsl:copy>
<xsl:call-template name="FormatDate">
<xsl:with-param name="DateTime" select="."/>
</xsl:call-template>
</xsl:copy>
</xsl:template>
<xsl:template name="FormatDate">
<xsl:param name="DateTime" />
<xsl:variable name="date">
<xsl:value-of select="substring-before($DateTime,'T')" />
</xsl:variable>
<xsl:if test="string-length($date) != 10">
<xsl:value-of select="$DateTime"/>
</xsl:if>
<xsl:if test="string-length($date) = 10">
<xsl:value-of select="$date"/>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
шаблоны являются трудным понятием для изучения, Вы могли бы быть более обеспеченным запуском с более простого for-each
, и/или кажется, что Вы могли сделать с некоторыми учебными руководствами/книгами XSLT.
Форматирование станет намного проще в XPath 2.0, который Microsoft в настоящее время отказывается поддерживать последние 8 лет. Так как проблема форматирования сохраняется только для XSLT в .Net, мне нравится использовать настраиваемую функцию, которая проще и проще:
XSLT с функцией форматирования:
xmlns="http://www.w3.org/1999/xhtml"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
xmlns:user="http://www.tempuri.org/User">
<msxsl:script implements-prefix="user" language="C#">
<![CDATA[
public string FormatCurrency(string amount)
{
return decimal.Parse(amount).ToString("C0");
}
public string FormatDate(string dateValue)
{
return DateTime.Parse(dateValue).ToString("MM/dd/yyyy hh:mm");
}
]]>
</msxsl:script>
Использование:
<xsl:value-of select="user:FormatDate(@transactionDate)"/>
<xsl:value-of select="user:FormatCurrency(@amount)"/>
Когда вы выполняете свой XSLT в. Net не забудьте сообщить ему, что ему доверяют (чтобы запускался блок msxsl: script.
XslCompiledTransform.Load(reader, XsltSettings.TrustedXslt, null);