作成日: 2017/11/16 最終更新日: 2018/07/06
文書種別
不具合
状況
修正済み
詳細
セルが結合されている場合(自動マージが設定されている場合を含む)、当該セル全体またはセル内の一部の文字列を選択してコピーし、他のセルやテキストエディタに貼り付けた際、以下の問題が発生します。
- セル内の一部の文字列を選択してコピーした場合、すべての文字列が貼り付けられる
- ペーストした際、文字列の後ろに余計な空白文字が追加される
回避方法
Service Pack 1(v2.0.2018.0706)で修正済みです。
Service Pack 1(v2.0.2018.0706)より前のバージョンでは次の回避方法が有効です。
------------------------------------------
以下のように、コピー処理を変更します。
◎サンプルコード(VB.NET)
◎サンプルコード(C#)
Service Pack 1(v2.0.2018.0706)より前のバージョンでは次の回避方法が有効です。
------------------------------------------
以下のように、コピー処理を変更します。
◎サンプルコード(VB.NET)
Public Sub New() InitializeComponent() CommandManager.AddPreviewCanExecuteHandler(Me.GcSpreadGrid1, AddressOf OnCanExecuteCopy) End Sub Friend Shared Sub OnExecutedCopy(sender As Object, e As ExecutedRoutedEventArgs) Dim spread As GcSpreadGrid = TryCast(sender, GcSpreadGrid) If spread IsNot Nothing Then spread.EditCommands.Copy.Execute(e.Parameter) End If End Sub Friend Shared Sub OnCanExecuteCopy(sender As Object, e As CanExecuteRoutedEventArgs) If e.Command Is ApplicationCommands.Copy Then Dim spread As GcSpreadGrid = TryCast(sender, GcSpreadGrid) Dim selectRanges = spread.SelectedRanges If selectRanges.Count = 1 Then Dim range = selectRanges(0) If range.RangeType = CellRangeType.Cells AndAlso (range.RowCount > 1 OrElse range.ColumnCount > 1) Then If range.Equals(spread.GetSpanInfo(range.Row, range.Column)) OrElse range.Equals(spread.GetAutoMergedInfo(range.Row, range.Column)) Then Dim textBox = TryCast(e.OriginalSource, TextBox) If textBox IsNot Nothing AndAlso textBox.SelectionLength > 0 Then e.ContinueRouting = False e.CanExecute = True e.Handled = True End If End If End If End If End If End Sub
◎サンプルコード(C#)
public MainWindow()
{
InitializeComponent();
CommandManager.AddPreviewCanExecuteHandler(this.GcSpreadGrid1, OnCanExecuteCopy);
}
internal static void OnExecutedCopy(object sender, ExecutedRoutedEventArgs e)
{
GcSpreadGrid spread = sender as GcSpreadGrid;
if (spread != null)
{
spread.EditCommands.Copy.Execute(e.Parameter);
}
}
internal static void OnCanExecuteCopy(object sender, CanExecuteRoutedEventArgs e)
{
if (e.Command == ApplicationCommands.Copy)
{
GcSpreadGrid spread = sender as GcSpreadGrid;
var selectRanges = spread.SelectedRanges;
if (selectRanges.Count == 1)
{
var range = selectRanges[0];
if (range.RangeType == CellRangeType.Cells && (range.RowCount > 1 || range.ColumnCount > 1))
{
if (range.Equals(spread.GetSpanInfo(range.Row, range.Column)) || range.Equals(spread.GetAutoMergedInfo(range.Row, range.Column)))
{
var textBox = e.OriginalSource as TextBox;
if (textBox != null && textBox.SelectionLength > 0)
{
e.ContinueRouting = false;
e.CanExecute = true;
e.Handled = true;
}
}
}
}
}
}
旧文書番号
41412