作成日: 2021/03/10 最終更新日: 2021/03/10
文書種別
使用方法
詳細
シートのCloneメソッドを用いると、新しいシートに既存シートの内容をコピーすることができます。
しかし、特定の範囲だけをCloneメソッドでコピーするといった指定はできないため、この場合は個々セルの値やスタイル、行高や列幅、マージ情報等を個別にコピーする必要があります。
なお、既存シートの列幅の値が「-1」(デフォルト値)であった場合、実際の列幅としてDefaultColumnWidthの値が利用されますが、この値がコピーされていないと、複製前のサイズが復元されないことがあるので、このようなときはDefaultColumnWidthの値も明示的にコピーしてください。
以下に、10行6列の範囲を新しいシートの21行目以降にコピーするサンプルコードを記載します。
◎サンプルコード(VB)
しかし、特定の範囲だけをCloneメソッドでコピーするといった指定はできないため、この場合は個々セルの値やスタイル、行高や列幅、マージ情報等を個別にコピーする必要があります。
なお、既存シートの列幅の値が「-1」(デフォルト値)であった場合、実際の列幅としてDefaultColumnWidthの値が利用されますが、この値がコピーされていないと、複製前のサイズが復元されないことがあるので、このようなときはDefaultColumnWidthの値も明示的にコピーしてください。
以下に、10行6列の範囲を新しいシートの21行目以降にコピーするサンプルコードを記載します。
◎サンプルコード(VB)
Imports C1.C1Excel
Public Class Form1
Dim numCols As Integer = 6 'コピーする列数
Dim numRows As Integer = 10 'コピーする行数
Dim defRows As Integer = 20 'コピー先の開始行
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
C1XLBook1.Load("..¥..¥Test01.xlsx")
Dim xlsheet01 As XLSheet = C1XLBook1.Sheets(0)
' 新規シートの追加
Dim xlsheet02 As XLSheet = C1XLBook1.Sheets.Add
xlsheet02.Name = "Sheet-added"
' 列幅のコピー
Dim i As Integer
For i = 0 To numCols - 1
xlsheet02.Columns(i).Width = C1XLBook1.Sheets(0).Columns(i).Width
Next
' デフォルトの列幅のコピー
xlsheet02.DefaultColumnWidth = xlsheet01.DefaultColumnWidth
' 行高のコピー
Dim j As Integer
For j = 0 To numRows - 1
xlsheet02.Rows((j + defRows)).Height = xlsheet01.Rows(j).Height
Next
' 値とスタイルのコピー
For i = 0 To numCols - 1
For j = 0 To numRows - 1
xlsheet02((j + defRows), i).Value = xlsheet01(j, i).Value
xlsheet02((j + defRows), i).Style = xlsheet01.GetCell(j, i).Style?.Clone
Next
Next
' マージ範囲のコピー
Dim k As Integer
For k = 0 To xlsheet01.MergedCells.Count - 1
Dim range As XLCellRange = xlsheet01.MergedCells(k)
xlsheet02.MergedCells.Add(New XLCellRange(xlsheet02, (range.RowFrom + defRows), (range.RowTo + defRows), range.ColumnFrom, range.ColumnTo))
Next
' Excelファイルの保存
C1XLBook1.Save("..¥..¥Test01_save.xlsx")
System.Diagnostics.Process.Start("..¥..¥Test01_save.xlsx")
End Sub
End Class
◎サンプルコード(C#)using C1.C1Excel;
namespace prj_C1Excel
{
public partial class Form1 : Form
{
int numCols = 6; //コピーする列数
int numRows = 10; //コピーする行数
int defRows = 20; //コピー先の開始行
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
c1XLBook1.Load(@"..¥..¥Test01.xlsx");
XLSheet xlsheet01 = c1XLBook1.Sheets[0];
// 新規シートの追加
XLSheet xlsheet02 = c1XLBook1.Sheets.Add();
xlsheet02.Name = "Sheet-added";
// 列幅のコピー
for (int i = 0; i < numCols; i++)
{
xlsheet02.Columns[i].Width = c1XLBook1.Sheets[0].Columns[i].Width;
}
// デフォルトの列幅のコピー
xlsheet02.DefaultColumnWidth = xlsheet01.DefaultColumnWidth;
// 行高のコピー
for (int j = 0; j < numRows; j++)
{
xlsheet02.Rows[j + defRows].Height = xlsheet01.Rows[j].Height;
}
// 値とスタイルのコピー
for (int i = 0; i < numCols; i++)
{
for (int j = 0; j < numRows; j++)
{
xlsheet02[j + defRows, i].Value = xlsheet01[j, i].Value;
xlsheet02[j + defRows, i].Style = xlsheet01.GetCell(j, i).Style?.Clone();
}
}
// マージ範囲のコピー
for (int k = 0; k < xlsheet01.MergedCells.Count; k++)
{
XLCellRange range = xlsheet01.MergedCells[k];
xlsheet02.MergedCells.Add(new XLCellRange(xlsheet02, range.RowFrom + defRows, range.RowTo + defRows, range.ColumnFrom, range.ColumnTo));
}
// Excelファイルの保存
c1XLBook1.Save(@"..¥..¥Test01_save.xlsx");
System.Diagnostics.Process.Start(@"..¥..¥Test01_save.xlsx");
}
}
}
旧文書番号
86478