protected function _setPartCell($content, $line_index, $cell_index, $part, $action = 'replace')
    {
        if (property_exists($this, $part)) {
            if (is_null($line_index)) {
                end($this->{$part});
                $line_index = key($this->{$part});
            } else {
                $line_index--;
            }
            if (is_null($cell_index)) {
                if (isset($this->{$part}[$line_index])) {
                    end($this->{$part}[$line_index]);
                    $cell_index = key($this->{$part}[$line_index]);
                } else {
                    $cell_index = 0;
                }
            } else {
                $cell_index--;
            }
            if ($cell_index<$this->getCellSize() && 'insert'===$action) {
                $line = $this->{$part}[$line_index];
                array_splice($line, $cell_index, 0, array($content));
                $this->{$part}[$i] = $line;
                $this->_repadAllLines();
            } else {
                $this->{$part}[$line_index][$cell_index] = $content;
            }
            $this->_parseTableSizes(true);
        } elseif (!in_array($part, self::$_table_parts)) {
            throw new InvalidArgumentException(
                sprintf('Unknown table part "%s"!', $part)
            );
        }
    }