diff --git a/src/EleCho.MdViewer/src/EleCho.MdViewer/Controls/CodeSpanControl.xaml b/src/EleCho.MdViewer/src/EleCho.MdViewer/Controls/CodeSpanControl.xaml new file mode 100644 index 0000000..7a2e1c9 --- /dev/null +++ b/src/EleCho.MdViewer/src/EleCho.MdViewer/Controls/CodeSpanControl.xaml @@ -0,0 +1,32 @@ + + + + + + diff --git a/src/EleCho.MdViewer/src/EleCho.MdViewer/Controls/CodeSpanControl.xaml.cs b/src/EleCho.MdViewer/src/EleCho.MdViewer/Controls/CodeSpanControl.xaml.cs new file mode 100644 index 0000000..c5a76d6 --- /dev/null +++ b/src/EleCho.MdViewer/src/EleCho.MdViewer/Controls/CodeSpanControl.xaml.cs @@ -0,0 +1,51 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using System.Windows.Navigation; +using System.Windows.Shapes; + +namespace EleCho.MdViewer.Controls +{ + /// + /// CodeSpanControl.xaml 的交互逻辑 + /// + public partial class CodeSpanControl : UserControl + { + /// + /// Text + /// + public string Text + { + get => (string)GetValue(TextProperty); + + set => SetValue(TextProperty, value); + } + + /// + /// Text property + /// + public static readonly DependencyProperty TextProperty = + DependencyProperty.Register("Text", typeof(string), typeof(CodeSpanControl), new PropertyMetadata(string.Empty)); + + + public CodeSpanControl() + { + InitializeComponent(); + this.DataContext = this; + } + + private void Copy_Click(object sender, RoutedEventArgs e) + { + + } + } +} diff --git a/src/EleCho.MdViewer/src/EleCho.MdViewer/Markdown/MarkdownWpfRenderer.cs b/src/EleCho.MdViewer/src/EleCho.MdViewer/Markdown/MarkdownWpfRenderer.cs index 17dd35f..e559b50 100644 --- a/src/EleCho.MdViewer/src/EleCho.MdViewer/Markdown/MarkdownWpfRenderer.cs +++ b/src/EleCho.MdViewer/src/EleCho.MdViewer/Markdown/MarkdownWpfRenderer.cs @@ -371,8 +371,12 @@ public class MarkdownWpfRenderer htmlText.Text = text; var expander = new Expander(); var header = new StackPanel(); - header.Children.Add(new ProgressBar() { IsIndeterminate = true,Width = 30 }); + header.Orientation = Orientation.Horizontal; + header.HorizontalAlignment = HorizontalAlignment.Center; + header.Children.Add(new TextBlock() { Text="思考内容",Margin = new Thickness(0,0,5,0) }); + //header.Children.Add(new ProgressBar() { IsIndeterminate = true,Width = 30,Height= 5 }); expander.Header = header; + expander.IsExpanded = false; expander.Content = htmlText; return expander; @@ -408,38 +412,49 @@ public class MarkdownWpfRenderer CornerRadius = new CornerRadius(8), Margin = new Thickness(0, 0, 0, NormalSize) }; - - var codeContentElement = new SelectableTextBlock() + if (!fencedCodeBlock.Info.StartsWith("Excel", StringComparison.CurrentCultureIgnoreCase)) { - TextWrapping = TextWrapping.Wrap, - Padding = new Thickness(NormalSize / 2), + var codeContentElement = new SelectableTextBlock() + { + TextWrapping = TextWrapping.Wrap, + Padding = new Thickness(NormalSize / 2), - FontSize = NormalSize, - FontFamily = GetCodeTextFontFamily(), - }; + FontSize = NormalSize, + FontFamily = GetCodeTextFontFamily(), + }; - codeElement.Child = - codeContentElement; - codeElement.BindCodeBlockBackground(); + codeElement.Child = + codeContentElement; + codeElement.BindCodeBlockBackground(); - codeContentElement.BindCodeBlockForeground(); + codeContentElement.BindCodeBlockForeground(); - var language = ColorCode.Languages.FindById(fencedCodeBlock.Info); + var language = ColorCode.Languages.FindById(fencedCodeBlock.Info); - /*StyleDictionary styleDict = ColorMode switch + /*StyleDictionary styleDict = ColorMode switch + { + ColorMode.Light => StyleDictionary.DefaultLight, + ColorMode.Dark => StyleDictionary.DefaultDark, + + _ => StyleDictionary.DefaultLight + };*/ + StyleDictionary styleDict = StyleDictionary.DefaultDark; + + WpfSyntaxHighLighting writer = new(styleDict); + writer.FormatTextBlock(fencedCodeBlock.Lines.ToString(), language, codeContentElement); + + } + else { - ColorMode.Light => StyleDictionary.DefaultLight, - ColorMode.Dark => StyleDictionary.DefaultDark, - - _ => StyleDictionary.DefaultLight - };*/ - StyleDictionary styleDict = StyleDictionary.DefaultDark; - - WpfSyntaxHighLighting writer = new(styleDict); - writer.FormatTextBlock(fencedCodeBlock.Lines.ToString(), language, codeContentElement); + var codeSpanControl = new CodeSpanControl(); + codeSpanControl.SetResourceReference(Control.ForegroundProperty, MarkdownResKey.MainForeground); + codeSpanControl.SetResourceReference(Control.BackgroundProperty, MarkdownResKey.CodeBlockBackground); + codeSpanControl.Text = fencedCodeBlock.Lines.ToString(); + codeElement.Child = codeSpanControl; + } - return codeElement; + return codeElement; } public FrameworkElement RenderCodeBlock(CodeBlock codeBlock, CancellationToken cancellationToken) @@ -546,7 +561,7 @@ public class MarkdownWpfRenderer SelectableTextBlock paragraphElement = new SelectableTextBlock() { TextWrapping = TextWrapping.Wrap, - Margin = new Thickness(0, 0, 0, NormalSize), + Margin = new Thickness(0, NormalSize, 0, NormalSize), FontSize = NormalSize, }; diff --git a/src/ExcelHelper/AI/PromptUtil.cs b/src/ExcelHelper/AI/PromptUtil.cs index 338dec7..9e8733d 100644 --- a/src/ExcelHelper/AI/PromptUtil.cs +++ b/src/ExcelHelper/AI/PromptUtil.cs @@ -11,7 +11,7 @@ class PromptUtil public static string UsePrompt(string msg,string excelPrompt) { return $@" -你是一个Excel公式大师,你需要帮助用户解答Excel公式相关的问题。 +你是一个Excel和WPS公式大师,你需要帮助用户解答Excel与WPS公式相关的问题。 你在回复用户的问题时,需要遵守以下规则: 1. 优先保证答案的准确性,其次是简洁明了。 @@ -19,8 +19,11 @@ class PromptUtil 3. 可以例举1到2个例子来帮助用户更好地理解你的回答中的Excel公式。 4. 一定要保证文档格式的正确性,避免出现无法显示的内容。 5. 尽量使用比较简短与易懂的公式来回答用户的问题,避免用户无法理解。 - 6. 你不能跳过你的思考过程。 - + 6. 你一定要使用开始告诉用户的思考,并使用结束你的思考。 + 7. 当你输出公式时,请使用以下格式进行输出: + ```Excel_{{列}} + =SUM(A1:A100) + ``` 现在的时间是{DateTime.Now}。 当前用户提问的excel文件列信息为:{excelPrompt} diff --git a/src/ExcelHelper/ExcelHelper.csproj b/src/ExcelHelper/ExcelHelper.csproj index 34fd77f..ea7fb42 100644 --- a/src/ExcelHelper/ExcelHelper.csproj +++ b/src/ExcelHelper/ExcelHelper.csproj @@ -23,6 +23,12 @@ true Size + + + + + + @@ -69,9 +75,6 @@ - - - diff --git a/src/ExcelHelper/Utils/Excel2Prompt.cs b/src/ExcelHelper/Utils/Excel2Prompt.cs index bb2512d..0d80b39 100644 --- a/src/ExcelHelper/Utils/Excel2Prompt.cs +++ b/src/ExcelHelper/Utils/Excel2Prompt.cs @@ -14,7 +14,7 @@ public class Excel2Prompt /// /// A /// - public static string ConverterToPrompt(IEnumerable excelData, IEnumerable columns, string startCell) + public static string ConverterToPrompt(IEnumerable excelData, IEnumerable columns, string startCell,string sheetName) { /* 示例: @@ -37,7 +37,7 @@ public class Excel2Prompt - Missing values: 7007 */ var prompts = new List(); - prompts.Add("This Excel file contains the following columns:"); + prompts.Add($"This Excel file contains the following columns:"); var dataList = excelData.ToList(); // 解析 startCell,获取起始列的索引 @@ -68,6 +68,8 @@ public class Excel2Prompt $" - Sample values: ['{string.Join("', '", sampleValues)}']"; prompts.Add(prompt); } + prompts.Add($"Sheet Name: {sheetName}"); + prompts.Add($"Max Row: {excelData.Count()}"); return string.Join(Environment.NewLine + Environment.NewLine, prompts); } diff --git a/src/ExcelHelper/Views/ViewModels/ImportViewModel.cs b/src/ExcelHelper/Views/ViewModels/ImportViewModel.cs index 3f9f567..fce9351 100644 --- a/src/ExcelHelper/Views/ViewModels/ImportViewModel.cs +++ b/src/ExcelHelper/Views/ViewModels/ImportViewModel.cs @@ -92,7 +92,7 @@ public partial class ImportViewModel : ObservableRecipient, IViewModel } MaxRow = ExcelData.Count(); - ExcelPromptString = Excel2Prompt.ConverterToPrompt(ExcelData, columns,StartCell); + ExcelPromptString = Excel2Prompt.ConverterToPrompt(excelData, columns,StartCell,currentSheetName); } catch (Exception ex) { @@ -285,7 +285,7 @@ public partial class ImportViewModel : ObservableRecipient, IViewModel }; Messages.Add(aiChat); -#if !DEBUG +#if DEBUG var results = TEST_AI_CONTENT.Split('\n'); foreach(var result in results) { @@ -311,10 +311,16 @@ public partial class ImportViewModel : ObservableRecipient, IViewModel } - private const string TEST_AI_CONTENT = @" - -1231231 - + private static string TEST_AI_CONTENT = @" +```Excel_H +1231231122222222222222222222 +123 +1 +23 +12 +3 +12 +``` "; #region Props [ObservableProperty]