c# - C# wpf 如何将变量 Excel.Worksheet 从 Button_Click 传递到另一个 Button_Click
问题描述
我正在编写用于对 excel 中的特定列进行排序的 C# WPF 简单程序,并且在将变量 excel.worksheet 从 Button_Click 传递到另一个 Button_Click 时遇到问题。下面的代码:
using Microsoft.Win32;
using System.IO;
using System;
using System.Windows;
using Excel = Microsoft.Office.Interop.Excel;
namespace Sorting
{
public partial class MainWindow : Window
{
int column, CounterRow;
string filepath;
Excel.Worksheet x = new Excel.Worksheet();
public MainWindow()
{
InitializeComponent();
}
private void Choose_Files_Button_Click(object sender, RoutedEventArgs e)
{
OpenFileDialog ofd = new OpenFileDialog();
ofd.Multiselect = false;
ofd.Filter = "All files (*.*)|*.*";
ofd.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
if (ofd.ShowDialog() == true)
{
ListBox_Files.Items.Clear();
filepath = ofd.FileName;
ListBox_Files.Items.Add(Path.GetFileName(filepath));
}
if (ListBox_Files.Items.Count != 0) ListBox_Files.IsEnabled = Otworz.IsEnabled = true;
}
private void Button_Click_0(object sender, RoutedEventArgs e)
{
Excel.Application excel = new Excel.Application();
excel.Visible = true;
excel.DisplayAlerts = false;
Excel.Workbook sheet = excel.Workbooks.Open(filepath);
Excel.Worksheet x = excel.ActiveSheet as Excel.Worksheet;
MessageBox.Show("select column");
Sort(x,1);
MessageBox.Show("end");
excel.Quit();
}
void Button_Click(object sender, RoutedEventArgs e)
{
Excel.Application excel = new Excel.Application();
excel.Visible = true;
excel.DisplayAlerts = false;
Excel.Workbook sheet = excel.Workbooks.Open(filepath);
Excel.Worksheet x = excel.ActiveSheet as Excel.Worksheet;
}
private void Button_Click_1(object sender, RoutedEventArgs e)
{
Sort(x, 1);
}
private void Button_Click_2(object sender, RoutedEventArgs e)
{
Sort(x, 2);
}
private void Sort(Excel.Worksheet excel, int info)
{
Excel.Range rng = excel.Application.ActiveCell;
column = rng.Column;
Excel.Range userRange = excel.UsedRange;
CounterRow = userRange.Rows.Count;
Excel.Range range = excel.Range[excel.Cells[7, 1], excel.Cells[CounterRow - 1, 8]];
if (info == 1) range.Sort(range.Columns[column], Excel.XlSortOrder.xlAscending);
else if (info == 2) range.Sort(range.Columns[column], Excel.XlSortOrder.xlDescending);
}
}
}
谁能解释我,为什么 Click_Button_0 工作,当我通过 Click_Button 打开文件然后我将通过 Click_Button_1 对列进行排序,而 Click Button_2 不起作用?视觉工作室说:“System.InvalidCastException”
解决方案
推荐阅读
- java - 读取 txt 文件并记录它的页面 - JAVA
- javascript - JS 循环跳到屏幕上绘制的最后一个矩形(使用画布)
- flutter - 为什么 MediaQuery(context).size 会抛出错误?
- c++ - 获取分段错误字符串 s=s+"A";
- google-fit - 聚合 api 中缺少游泳和骑自行车活动的详细信息
- sql - SQL - 如何在 WHERE 语句中提取多行
- spring - 我可以让 Log4j 显示来自 Spring 类(特别是 Spring Security)的日志记录吗?
- android - 来自 onRequestPermissionsResult 的错误
- hibernate - 如何进行一对一映射休眠?
- java - 如何在我的手机/模拟器中打开 PDF 查看器(adobe pdf)