[英]How can I skip blank columns in a range?
我正在使用C#和Interop.Excel.Range返回工作表的已用列范圍,並將已用列和行寫入datagrid視圖。 一些列返回空白/空值。
Microsoft.Office.Interop.Excel.Range excelRange = wWorksheet.UsedRange;
TabPage wTabPage = new TabPage(wWorksheet.Name.ToString());
DataGridView wDGV = new DataGridView();
wDGV.Dock = DockStyle.Fill;
wTabPage.Controls.Add(wDGV);
Sheets_TabControl.TabPages.Add(wTabPage);
DataTable dt = new DataTable();
DataRow wNewRow = null;
for (int i = 0; i < excelRange.Columns.Count; i++)
{
dt.Columns.Add(new DataColumn(i.ToString(), typeof(string)));
}
string wValue = string.Empty;
Microsoft.Office.Interop.Excel.Range wRange = null;
for (int wRowIndex = 1; wRowIndex <= skipRows; wRowIndex++)
{
wNewRow = dt.NewRow();
foreach (DataColumn wColumn in dt.Columns)
{
wRange = excelRange.Cells[wRowIndex, wColumn.Ordinal + 1];
if (wRange != null)
{
if (wRange.Value2 != null)
{
wValue = wRange.Value2.ToString();
if (!string.IsNullOrEmpty(wValue))
{
wNewRow.SetField(wColumn, wValue);
}
}
}
}
dt.Rows.Add(wNewRow)
}
wDGV.DataSource = dt;
在寫入包含數據的列時,有沒有辦法跳過或忽略任何空白列?
謝謝您的幫助!
這樣做的關鍵是使用VBA工作表函數CountA
,該函數返回一個值,該值指示給定范圍內有多少個單元格具有數據。 基於此,您可以決定是否在DataTable
創建一列。
由於表格列和Excel范圍列現在不同步,因此您需要使用在代碼中設置的列名稱作為相應Excel范圍列的索引。
因此,重新編碼您的代碼將得到:
Microsoft.Office.Interop.Excel.Range excelRange = wWorksheet.UsedRange;
TabPage wTabPage = new TabPage(wWorksheet.Name.ToString());
DataGridView wDGV = new DataGridView();
wDGV.Dock = DockStyle.Fill;
wTabPage.Controls.Add(wDGV);
Sheets_TabControl.TabPages.Add(wTabPage);
DataTable dt = new DataTable();
DataRow wNewRow = null;
// New code to create DataTable columns
for (int i = 1; i <= excelRange.Columns.Count; i++)
{
// If the current column of cells does not contain any data, then don't add a column to the datatable
if (xlSpreadsheet.App.WorksheetFunction.CountA(excelRange.Cells[Missing.Value, i]) != 0)
{
dt.Columns.Add(new DataColumn(i.ToString(), typeof(string)));
}
}
string wValue = string.Empty;
Microsoft.Office.Interop.Excel.Range wRange = null;
for (int wRowIndex = 1; wRowIndex <= excelRange.Rows.Count; wRowIndex++)
{
wNewRow = dt.NewRow();
foreach (DataColumn wColumn in dt.Columns)
{
// Parse the column number we stored earlier as the column name
int colNumber = 0;
if (int.TryParse(wColumn.ColumnName, out colNumber))
{
// We use the parsed column number to index the column in the Excel range
wRange = excelRange.Cells[wRowIndex, colNumber];
if (wRange != null)
{
if (wRange.Value2 != null)
{
wValue = wRange.Value2.ToString();
if (!string.IsNullOrEmpty(wValue))
{
wNewRow.SetField(wColumn, wValue);
}
}
}
}
}
dt.Rows.Add(wNewRow)
}
wDGV.DataSource = dt;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.