Как выровнять ячейку по вертикали с RowSpan> 1 - PullRequest
3 голосов
/ 30 ноября 2011

Я хочу иметь это enter image description here, но вместо этого имейте это enter image description here. Обратите внимание, что когда я меняю VerticalAlign.Middle на VerticalAlign.Top , он на самом деле работает, как и ожидалось. Пожалуйста, смотрите ниже код, который я пытаюсь:

   // I assume that table table is already created and well-defined  
   // Create a new row

    TableRow tRow = new TableRow();

    tRow.HorizontalAlign = HorizontalAlign.Center;

    // add the row to the table

    table.Rows.Add(tRow);

    // Create a new cell

    TableCell tCell = new TableCell();

    tCell.VerticalAlign = VerticalAlign.Middle; // Want to get it in the middle of two merged rows

    tCell.RowSpan = 2;

    tCell.Text = "England";

    tCell.Font.Bold = true;

    tRow.Cells.Add(tCell);

    // Create new cell

    tCell = new TableCell();

    tCell.Text = "2010";

    tCell.Font.Bold = true;

    tRow.Cells.Add(tCell);

    // Create new row

    tRow = new TableRow();

    // add the row to the table

    table.Rows.Add(tRow);

    // Create new cell

    tCell = new TableCell();

    tCell.Text = "2011";

    tCell.Font.Bold = true;

    tRow.Cells.Add(tCell);

Обновление: см. Дополнительный код ниже. У меня нет html-кода как такового, но я посмотрел на sw.ToString () , и форматирование выглядит правильно, но все же файл Excel выглядит неправильно отформатированным. Мой браузер IE, но я думаю, что это не имеет значения. Я пытался tCell.CssClass = "className"; результат тот же.

public static void Comparison_Report(string fileName)
{
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.AddHeader("content-disposition", string.Format("attachment; filename={0}", fileName));
HttpContext.Current.Response.ContentType = "application/ms-excel";
using (StringWriter sw = new StringWriter())
{
using (HtmlTextWriter htw = new HtmlTextWriter(sw))
{
// Create a table to contain the grid
Table table = new Table();

///----- Original code goes here----

// render the table into the htmlwriter
table.RenderControl(htw);
// render the htmlwriter into the response  
HttpContext.Current.Response.Write(sw.ToString());
HttpContext.Current.Response.End();
}

}

}

Ответы [ 3 ]

2 голосов
/ 30 ноября 2011

Наконец я проверил это сам.Кажется, он не работает в Excel, если вы используете valign="middle" в ячейке таблицы.Вы должны использовать CSS.

Так что вместо

tCell.VerticalAlign = VerticalAlign.Middle

do

tCell.Style.Add("vertical-align", "middle")

Это позволит правильно выровнять текст в excel.Сам Excel использует css-классы, если вы экспортируете его из Excel в HTML.

Но, повторяя мой комментарий, я бы порекомендовал сгенерировать настоящий файл excel вместо создания html, который можно было бы открыть и правильно интерпретировать.С EPPlus это очень просто: Экспорт данных в Excel

2 голосов
/ 30 ноября 2011

Сделайте это в CSS, пожалуйста! Установите в ячейке класс, для которого вы хотите, чтобы в нем была «Англия», и выберите целевой класс.

код

tCell.Text = "England";
tCell.CssClass = "className";

Css

td.className {
   vertical-align:middle;
}

Редактировать Итак, по многочисленным просьбам объяснение, почему использовать CSS здесь, а не устанавливать это при создании ячейки таблицы.

То, что вы получаете от использования отдельной таблицы стилей, - это куча возможностей и контроля над тем, как этот элемент будет выглядеть на клиенте. Когда вы устанавливаете это в коде, вы явно говорите, что это должно быть только так - однако, когда вы устанавливаете это в CSS и используете таблицу стилей, вы можете делать такие вещи, как нацеливание на разные платформы, легко менять позицию, добавлять дополнительные элементы и т. Д. Это старая дискуссия между наличием встроенного стиля и выводом стиля на отдельный лист. Я думаю, что эта тема довольно хорошо обсуждается в Интернете, если вы хотите узнать больше об этом ...

Редактировать 2 Я только что попробовал твой код, когда ты вставил его, и он работал нормально для меня - ячейка была выровнена по середине. Я бы использовал Firebug, чтобы попытаться выяснить, есть ли другие стили, которые действуют на эту ячейку таблицы, чтобы заставить ее иметь такое поведение.

0 голосов
/ 05 июня 2015
<td   align='left' valign='middle' ></td>

Не работает экспорт файла Excel из кода позади. Поэтому я ищу в Интернете и нашел этот пример.

td.className {
   vertical-align:middle;
}

это сэкономит мое время.Спасибо

...