I am using excel interop in creating excel. Now, I have to get the size of a column as basis of what the next column’s size would be. I tried the following code:
width = xlWorksheet.Range[xlWorksheet.Cells[1, 4], xlWorksheet.Cells[1, 11]].Width;
xlWorksheet.Columns[5].ColumnWidth = width;
width_of_first_col = xlWorksheet.Range[xlWorksheet.Cells[1, 1], xlWorksheet.Cells[1, 1]].Width;
xlWorksheet.Columns[6].ColumnWidth = width_of_first_col;
The result should be column 4 and column 5 have the same size, as well as column 1 and 6. But this is not true to what the exact result looks like.
What is the best thing to do to set the with of a cell to another cell. Thanks.
asked Sep 4, 2015 at 7:33
Excel manages width of columns in multiple ways.
- The Columnwidth property returns or sets the width of columns as the number of characters of the normal font that can be accommodated in one column. Please refer to this link.
- The width property gives the width in points of a range as specified here.
answered Dec 9, 2015 at 12:28
Range.Width
is a read-only property, which give you the width in points.
Range.ColumnWidth
is a read/write property, which gives you the width in what I like to call character units. A character unit represents the width of the character 0
under the font type and size as defined by the Normal
style of the workbook.
In your case, since you do not need to calculate the width in points, just use .ColumnWidth
all along.
n = ColumnNumberOfYourChoice;
width = xlWorksheet.Range.Columns.Item[n].ColumnWidth;
xlWorksheet.Columns[5].ColumnWidth = width;
width_of_first_col = xlWorksheet.Range.Columns.Item[1].ColumnWidth;
xlWorksheet.Columns[6].ColumnWidth = width_of_first_col;
Note from the documentation:
If all columns in the range have the same width, the ColumnWidth property returns the width. If columns in the range have different widths, this property returns Null.
answered Jan 16, 2020 at 11:27
AmaAma
1,31110 silver badges23 bronze badges
Olegaaator 14 / 14 / 0 Регистрация: 12.12.2010 Сообщений: 159 |
||||
1 |
||||
.NET 4.x 03.04.2012, 01:26. Показов 36464. Ответов 11 Метки нет (Все метки)
Собственно. Создаю рабочий лист, кидаю данные.
Все, конечно, работает, но в самой таблице выглядит не красиво по причине того, что столбцы приходится вручную расширять
0 |
32 / 15 / 1 Регистрация: 06.05.2011 Сообщений: 56 |
|
03.04.2012, 01:30 |
2 |
Пробывал указывать ws.Columns.Width?
1 |
Olegaaator 14 / 14 / 0 Регистрация: 12.12.2010 Сообщений: 159 |
||||||||
03.04.2012, 01:46 [ТС] |
3 |
|||||||
Нашел.
Но он всем ячейкам выставляет заданную ширину. А как только выбранным задавать? Добавлено через 3 минуты
В чем принципиальная разница? Добавлено через 5 минут
1 |
DimonR91 32 / 15 / 1 Регистрация: 06.05.2011 Сообщений: 56 |
||||
03.04.2012, 01:47 |
4 |
|||
Может быть в том, что у
Можно задавать конкретный размер для каждой колонки) Чтобы сделать конкретно ширину колонки под твой размер, устанавливать вручную для каждой клонки в зависимости от длины записи…
2 |
14 / 14 / 0 Регистрация: 12.12.2010 Сообщений: 159 |
|
03.04.2012, 01:58 [ТС] |
5 |
DimonR91, да да да, уже понял, что колонки в массиве перечисляются. с шириной все ясно. при каждом добавлении информации проверять ее длину стоки и если она больше — менять ширину столбца. А вот как на другую вкладку в самом ms excel отправлять данные? И как эти вкладки переименовывать?
0 |
32 / 15 / 1 Регистрация: 06.05.2011 Сообщений: 56 |
|
03.04.2012, 02:03 |
6 |
http://wladm.narod.ru/C_Sharp/comexcel.html#2
0 |
Olegaaator 14 / 14 / 0 Регистрация: 12.12.2010 Сообщений: 159 |
||||
03.04.2012, 03:25 [ТС] |
7 |
|||
разобралси.
0 |
2 / 2 / 1 Регистрация: 12.11.2010 Сообщений: 38 |
|
18.04.2013, 13:26 |
8 |
а как сделать, чтобы ширина устанавливалася по содержимому???
0 |
0 / 0 / 0 Регистрация: 14.06.2013 Сообщений: 2 |
|
14.06.2013, 09:03 |
9 |
ws.Columns.EntireColumn.AutoFit();
0 |
Letos07 2 / 2 / 1 Регистрация: 12.11.2010 Сообщений: 38 |
||||
18.06.2013, 14:31 |
10 |
|||
Приложение Silverlight, ширина не устанавливается
0 |
0 / 0 / 0 Регистрация: 14.06.2013 Сообщений: 2 |
|
20.06.2013, 14:22 |
11 |
Нельзя поставить Autofit ячейки,если они еще не заполнены данными
0 |
Olesya1 0 / 0 / 0 Регистрация: 30.09.2015 Сообщений: 21 |
||||
31.03.2018, 07:59 |
12 |
|||
подскажите пожалуйста, как изменить высоту строк и сделать так что бы данные которые находились в данной ячейке были по размеру и не выходили за ее пределы??
0 |
Я использую стандартную библиотеку
using Excel = Microsoft.Office.Interop.Excel;
И вот как я создаю Excel, всего лишь небольшую часть кода:
//Excel.Application xlApp;
Excel.Workbook xlWorkBook;
Excel.Worksheet xlWorkSheet;
object misValue = System.Reflection.Missing.Value;
Excel._Application xlApp = new Excel.Application();
xlWorkBook = xlApp.Workbooks.Add(misValue);
xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
//add data
xlWorkSheet.Cells[1, 1] = "";
xlWorkSheet.Cells[1, 2] = "Student1";
xlWorkSheet.Cells[1, 3] = "Student2";
xlWorkSheet.Cells[1, 4] = "Student3";
Проблема в том, что иногда размер ячейки может быть меньше размера текста. Я пробовал вот это:
Excel.Range chartRange;
chartRange.EntireColumn.ColumnWidth = 31.43;
Он работает нормально, но мне нужно установить это свойство для каждого столбца отдельно. Как я могу это сделать?
7 ответов
Лучший ответ
Обычно я делаю это в VB, и это проще, потому что Excel записывает макросы в VB. Поэтому я обычно захожу в Excel и сохраняю макрос, который хочу сделать.
Вот что я сделал сейчас и получил этот код:
Columns("E:E").ColumnWidth = 17.29;
Range("E3").Interior.Pattern = xlSolid;
Range("E3").Interior.PatternColorIndex = xlAutomatic;
Range("E3").Interior.Color = 65535;
Range("E3").Interior.TintAndShade = 0;
Range("E3").Interior.PatternTintAndShade = 0;
Думаю, можно сделать что-то вроде этого:
xlWorkSheet.Columns[5].ColumnWidth = 18;
Что касается вашего последнего вопроса, что вам нужно сделать, это прокрутить столбцы, которые вы хотите установить, их ширину:
for (int i = 1; i <= 10; i++) // this will apply it from col 1 to 10
{
xlWorkSheet.Columns[i].ColumnWidth = 18;
}
50
Lee Taylor
13 Апр 2019 в 21:24
Я сделал это так:
var xlApp = new Excel.Application();
var xlWorkBook = xlApp.Workbooks.Add(System.Reflection.Missing.Value);
var xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.Item[1];
xlWorkSheet.Columns.AutoFit();
Таким образом, столбцы всегда соответствуют ширине текста внутри ячеек.
Надеюсь, это кому-то поможет!
37
hakan
8 Мар 2015 в 14:48
Эта ссылка объясняет, как применить стиль ячейки к диапазону ячеек: http: // msdn.microsoft.com/en-us/library/f1hh9fza.aspx
Смотрите этот фрагмент:
Microsoft.Office.Tools.Excel.NamedRange rangeStyles =
this.Controls.AddNamedRange(this.Range["A1"], "rangeStyles");
rangeStyles.Value2 = "'Style Test";
rangeStyles.Style = "NewStyle";
rangeStyles.Columns.AutoFit();
4
Rob J
15 Дек 2013 в 19:58
Я изменил ширину всех столбцов в моем случае как
worksheet.Columns[1].ColumnWidth = 7;
worksheet.Columns[2].ColumnWidth = 15;
worksheet.Columns[3].ColumnWidth = 15;
worksheet.Columns[4].ColumnWidth = 15;
worksheet.Columns[5].ColumnWidth = 18;
worksheet.Columns[6].ColumnWidth = 8;
worksheet.Columns[7].ColumnWidth = 13;
worksheet.Columns[8].ColumnWidth = 17;
worksheet.Columns[9].ColumnWidth = 17;
Примечание. Столбцы на листе начинаются с 1, а не с 0, как в Arrary.
4
Saleem Kalro
19 Сен 2017 в 02:47
Используйте этот
((Excel.Range)oSheet.Cells[1, 1]).EntireColumn.ColumnWidth = 10;
4
Deepak Jha
17 Май 2019 в 09:25
Excel ColumnWidth из dataGridView:
foreach (DataGridViewColumn co in dataGridView1.Columns)
{ worksheet.Columns[co.Index + 1].ColumnWidth = co.Width/8; }
1
Reza Feizi
29 Янв 2018 в 12:20
См. Этот фрагмент: (C #)
private Microsoft.Office.Interop.Excel.Application xla;
Workbook wb;
Worksheet ws;
Range rg;
..........
xla = new Microsoft.Office.Interop.Excel.Application();
wb = xla.Workbooks.Add(XlSheetType.xlWorksheet);
ws = (Worksheet)xla.ActiveSheet;
rg = (Range)ws.Cells[1, 2];
rg.ColumnWidth = 10;
rg.Value2 = "Frequency";
rg = (Range)ws.Cells[1, 3];
rg.ColumnWidth = 15;
rg.Value2 = "Impudence";
rg = (Range)ws.Cells[1, 4];
rg.ColumnWidth = 8;
rg.Value2 = "Phase";
0
ram prasad
17 Дек 2015 в 14:11
- Remove From My Forums
-
Question
-
How to set column width of column with C#?
After tried the following, no effect
//((Excel.Range)oSheet.Columns["A", Missing]).ColumnWidth = 10; //((Excel.Range)oSheet.Columns["B", Missing]).ColumnWidth = 10; ((Excel.Range)oSheet.Cells[1, 1]).EntireColumn.ColumnWidth = 10; ((Excel.Range)oSheet.Cells[1, 2]).EntireColumn.ColumnWidth = 10;
資產一定是正數的嗎? -.-
Answers
-
Excel.Worksheet esheet; esheet = (Excel.Worksheet)Globals.ThisWorkbook.Sheets[1]; Excel.Range er = esheet.get_Range("A:A",System.Type.Missing); er.EntireColumn.ColumnWidth = 35;
regards
-
Proposed as answer by
Thursday, June 14, 2012 8:31 AM
-
Marked as answer by
沈世鈞
Thursday, June 21, 2012 8:05 AM
-
Proposed as answer by
У меня есть сценарий aС#, который успешно открывает указанную книгу Excel, удаляет первую строку и сохраняет ее как формат csv.
У меня проблема, что CSV сохраняет стандартную ширину столбца 8.43. Я хотел бы изменить ширину столбца col J как 17.00 перед сохранением csv.
Может кто-нибудь, пожалуйста, сообщите, как я установил ширину полки Col J до 17.
Из-за процесса я не могу использовать VBA/Macros.
Я использую;
myWorkSheet.Columns["J:J"].ColumnWidth = 17.57;
Однако это приводит к тому, что объект не содержит определения для скриншота «ColumnWidth».
Полный код ниже;
public void DeleteRows(string OriginalFileName,String NewFileName)
{
Microsoft.Office.Interop.Excel.Application myApp;
Microsoft.Office.Interop.Excel.Workbook myWorkBook;
Microsoft.Office.Interop.Excel.Worksheet myWorkSheet;
Microsoft.Office.Interop.Excel.Range range;
myApp = new Microsoft.Office.Interop.Excel.Application();
myWorkBook = myApp.Workbooks.Open(OriginalFileName, 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "t", false, false, 0, true, 1, 0);
myWorkSheet = (Microsoft.Office.Interop.Excel.Worksheet)myWorkBook.Worksheets.get_Item(1);
range = (Microsoft.Office.Interop.Excel.Range)myWorkSheet.Application.Rows[1, Type.Missing];
range.Select();
range.Delete(Microsoft.Office.Interop.Excel.XlDirection.xlUp);
//Microsoft.Office.Interop.Excel.Range ThisRange1 = myWorkSheet.get_Range("J:J",System.Type.Missing);
myWorkSheet.Columns["J:J"].ColumnWidth = 17.57; //ERRORLINE
myApp.DisplayAlerts = false;
myWorkSheet.SaveAs(NewFileName, Microsoft.Office.Interop.Excel.XlFileFormat.xlCSVWindows, Type.Missing, Type.Missing, false, false, false, XlSaveConflictResolution.xlLocalSessionChanges, Type.Missing, Type.Missing);
myWorkBook.Close(false);
myApp.Quit();
}
c# Изменение ширины колонки в Excel файле
В этой статье показано, как программно изменить ширину колонки в Excel файле с помощью языка c#
Создадим новый Excel файл, который содержит три колонки: ID, Name, Age.
Код:
Excel.Application exApp = new Excel.Application();
exApp.Workbooks.Add();
Worksheet workSheet = (Worksheet)exApp.ActiveSheet;
workSheet.Cells[1,1] = "ID";
workSheet.Cells[1,2] = "Name";
workSheet.Cells[1,3] = "Age";
Как изменить ширину всех колонок в Excel?
workSheet.Columns.ColumnWidth = 20;
Как изменить ширину определенной колонки в Excel?
Например, изменим ширину второй колонки:
Код:
Excel.Range range = workSheet.Range["B1", System.Type.Missing];
range.EntireColumn.ColumnWidth = 25;
Как изменить ширину нескольких колонок в Excel?
Например, изменим ширину первой и второй колонки:
Код:
Excel.Range range = workSheet.Range["A1:B1", System.Type.Missing];
range.EntireColumn.ColumnWidth = 25;
Диапазон колонок задаётся с помощью свойства Range.
Автоматическое изменение ширины колонок
Если ширина колонок заранее неизвестна, то тогда Вы можете воспользоваться методом AutoFit, например:
workSheet.Columns.AutoFit();
В данном примере ширина вычисляется автоматически на основе длины значения, которое содержится внутри ячейки. Поэтому метод AutoFit вызываться после того, как лист будет заполнен данными.
Finally i get Solution……
SaveFileDialog fileTerminal = new SaveFileDialog();
{
fileTerminal.Title = «Select File To Upload»;
fileTerminal.FileName = lblHeader.Text.Replace(» «, «») + «_» + TodayDateinTimeZone().ToString(«ddMMyyyyhhmmss»);
fileTerminal.Filter = «xlsx files(*.xlsx)|*.xlsx|xls files(*.xls)|*.xls|All files(*.*)|*.*»;
fileTerminal.FilterIndex = 2;
fileTerminal.InitialDirectory = @»C:»;
fileTerminal.RestoreDirectory = true;
if (fileTerminal.ShowDialog() == DialogResult.OK)
{
int columnCount = 0;
string filename = fileTerminal.FileName;
Excel.Application xlApp = default(Excel.Application);
Excel.Workbook xlWorkBook = default(Excel.Workbook);
Excel.Worksheet xlWorkSheet = default(Excel.Worksheet);
object misValue = System.Reflection.Missing.Value;
xlApp = new Microsoft.Office.Interop.Excel.ApplicationClass();
xlWorkBook = xlApp.Workbooks.Add(misValue);
xlWorkSheet = (Microsoft.Office.Interop.Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
int i = 0;
int j = 0;
xlWorkSheet.Cells[1, 5] = lblHeader.Text.ToString();
for (int y = 1; y <= dtTempExcel.Columns.Count; y++)
{
xlWorkSheet.Cells[3, y] = dtTempExcel.Columns[y — 1].ColumnName;
}
for (i = 0; i <= dtTempExcel.Rows.Count — 1; i++)
{
for (j = 0; j <= dtTempExcel.Columns.Count — 1; j++)
{
DataGridViewCell cell = dgvAgentDetails[j, i];
// xlWorkSheet.Cells[i + 4, j + 1] = dtTempExcel.Rows[j][i].ToString();
xlWorkSheet.Cells[i + 4, j + 1] = cell.Value;
}
}
xlWorkSheet.get_Range(xlWorkSheet.Cells[3, 1], xlWorkSheet.Cells[3, dgvAgentDetails.Columns.Count]).Interior.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Yellow);
xlWorkSheet.get_Range(xlWorkSheet.Cells[1, 1], xlWorkSheet.Cells[1, dgvAgentDetails.Columns.Count]).Font.Bold = 40;
xlWorkSheet.get_Range(xlWorkSheet.Cells[3, 1], xlWorkSheet.Cells[1, dgvAgentDetails.Columns.Count]).Font.Bold = 20;
xlWorkSheet.get_Range(xlWorkSheet.Cells[3, 1], xlWorkSheet.Cells[1, dgvAgentDetails.Columns.Count]).EntireColumn.AutoFit();
xlWorkBook.SaveAs(filename.ToString(), Microsoft.Office.Interop.Excel.XlFileFormat.xlWorkbookNormal, misValue, misValue, misValue, misValue, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue);
xlWorkBook.Close(true, misValue, misValue);
xlApp.Quit();
releaseObject(xlWorkSheet);
releaseObject(xlWorkBook);
releaseObject(xlApp);
}
}
private void releaseObject(object obj)
{
try
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
obj = null;
}
catch (Exception exp)
{
obj = null;
MessageBox.Show(«Exception Occured while releasing object » + exp.ToString(), Common.MSGBOX_TITLE, MessageBoxButtons.OK, MessageBoxIcon.Error);
Database.LogData(GlobalVar.getAgentID.ToString(), GlobalVar.getTerminalID.ToString(), GlobalVar.getIpAddress.ToString(),
GlobalVar.getTerminalType.ToString(), «X», «ControlPanel», «releaseObject», exp.Message.ToString(), GlobalVar.getSequenceId);
}
finally
{
GC.Collect();
}
}