C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: .NET上でエクセル上でコピーやに罫線を引く


(過去ログ 130 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■77160 / inTopicNo.1)  .NET上でエクセル上でコピーやに罫線を引く
  
□投稿者/ まあさ (9回)-(2015/09/18(Fri) 10:00:49)

分類:[VB.NET/VB2005 以降] 

VB6.0では、下記のようにコーディングされています

Private Const xlEdgeTop = 8
Private Const xlEdgeBottom = 9
Private Const xlContinuous = 1
Private Const xlThin = 2
Private Const xlAutomatic = -4105
:
:
Public Function excel() As Boolean
Dim xlsApp As Object
Dim xlsbook As Object
Dim xlssheet As Object
Dim xlssheetCopy As Object
:
:

  xlssheet.Cells(2, 2) = "ABC"

'明細部コピー(書式&罫線コピー)
xlssheet.Range(xlssheet.Cells(2, 2), xlssheet.Cells(2, 12)).Copy
xlssheet.Range(xlssheet.Cells(2, 2), xlssheet.Cells(10, 12)).Select
xlssheet.Paste

xlssheet.Cells(3, 2) = "あいうえお"

  '罫線
  xlssheet.Cells(3, 2).Borders(xlEdgeTop).LineStyle = xlContinuous
xlssheet.Cells(3, 2).Borders(xlEdgeTop).Weight = xlThin
xlssheet.Cells(3, 2).Borders(xlEdgeTop).ColorIndex = xlAutomatic
:
:

とあります。
これを、.Netで焼き直しを行っていますが、セルに値を入れることはできましたが
コピーや罫線を引くところが解りません
一応下記のようにコーディングしてみました

Private Const xlEdgeTop = 8
Private Const xlEdgeBottom = 9
Private Const xlContinuous = 1
Private Const xlThin = 2
Private Const xlAutomatic = -4105
:
:
Public Function excel() As Boolean

Dim xlApp As Excel.Application = Nothing
Dim xlBooks As Excel.Workbooks = Nothing
Dim xlBook As Excel.Workbook = Nothing
Dim xlSheets As Excel.Sheets = Nothing
Dim xlSheet1 As Excel.Worksheet = Nothing
Dim xlRange As Excel.Range = Nothing
Dim xlCells As Excel.Range = Nothing
   :
   :

    xlRange = xlCells(2, 2)
xlRange.Value = "ABC"
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlRange)

  '明細部コピー(書式&罫線コピー)
    この部分がわかりません

    xlRange = xlCells(3, 2)
xlRange.Value = "あいうえお"
    System.Runtime.InteropServices.Marshal.ReleaseComObject(xlRange)

    '罫線
    この部分がわかりません


お解りの方よろしくお願いします



引用返信 編集キー/
■77161 / inTopicNo.2)  Re[1]: .NET上でエクセル上でコピーやに罫線を引く
□投稿者/ 魔界の仮面弁士 (501回)-(2015/09/18(Fri) 10:41:57)
2015/09/18(Fri) 10:43:59 編集(投稿者)

No77160 (まあさ さん) に返信
> Public Function excel() As Boolean
タイプライブラリと同じ関数名にされているのですか…ちょっと混同しそう。


> Dim xlApp As Excel.Application = Nothing
VB6 の時は、レイトバインドで As Object にされていましたよね。
今回は、参照設定する方法に変更されたのですか?


> '明細部コピー(書式&罫線コピー)
>  この部分がわかりません

イメージとしてはこんな感じかな。

 xlCells = xlSheet1.Cells
 a = xlCells(2, 2)
 b = xlCells(2, 12)
 c = xlCells(10, 12)
 d = xlSheet1.Range(a, b)
 e = xlSheet1.Range(a, c)
 d.Copy()
 e.Slect()
 xlSheet1.Paste()
 If Marshal.IsComObject(e) Then Marshal.ReleaseComObject(e)
 If Marshal.IsComObject(d) Then Marshal.ReleaseComObject(d)
 If Marshal.IsComObject(c) Then Marshal.ReleaseComObject(c)
 If Marshal.IsComObject(b) Then Marshal.ReleaseComObject(b)
 If Marshal.IsComObject(a) Then Marshal.ReleaseComObject(a)
 If Marshal.IsComObject(xlCells) Then Marshal.ReleaseComObject(xlCells)
 If Marshal.IsComObject(xlSheet1) Then Marshal.ReleaseComObject(xlSheet1)


もしくは、Select せずに直接範囲を明示して
 a = xlSheet1.Range("B2:L2")
 b = xlSheet1.Range("B2:L10")
 a.Copy b
 If Marshal.IsComObject(b) Then Marshal.ReleaseComObject(b)
 If Marshal.IsComObject(a) Then Marshal.ReleaseComObject(a)
 If Marshal.IsComObject(xlSheet1) Then Marshal.ReleaseComObject(xlSheet1)
でも良い気がします。



> '罫線
> この部分がわかりません

VB6 のコードが
 xlssheet.Cells(3, 2).Borders(xlEdgeTop).LineStyle = xlContinuous
 xlssheet.Cells(3, 2).Borders(xlEdgeTop).Weight = xlThin
 xlssheet.Cells(3, 2).Borders(xlEdgeTop).ColorIndex = xlAutomatic
なので、VB.NET は
 a = xlCells(3, 2)
 b = a.Borders
 c = b(xlEdgeTop)
 c.LineStyle = xlContinuous
 c.Weight = xlThin
 c.ColorIndex = xlAutomatic
 If Marshal.IsComObject(c) Then Marshal.ReleaseComObject(c)
 If Marshal.IsComObject(b) Then Marshal.ReleaseComObject(b)
 If Marshal.IsComObject(a) Then Marshal.ReleaseComObject(a)
ですかね。あとは xlCells の解放。
引用返信 編集キー/
■77196 / inTopicNo.3)  Re[2]: .NET上でエクセル上でコピーやに罫線を引く
□投稿者/ まあさ (10回)-(2015/09/21(Mon) 15:43:20)
No77161 (魔界の仮面弁士 さん) に返信

魔界の仮面弁士さん、いつもお世話になっています。
無事解決しました。









解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -